mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
PDF Output: Improve handling of images that do not fit on a page. Fixes #1852205 [Calibre Vers. 4, new Viewer print feature.](https://bugs.launchpad.net/calibre/+bug/1852205)
This commit is contained in:
parent
9e8585faf1
commit
f825c7c4d6
31
resources/pdf-preprint.js
Normal file
31
resources/pdf-preprint.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/* vim:fileencoding=utf-8
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019 Kovid Goyal <kovid at kovidgoyal.net>
|
||||||
|
*
|
||||||
|
* Distributed under terms of the GPLv3 license
|
||||||
|
*/
|
||||||
|
/*jshint esversion: 6 */
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
"use strict";
|
||||||
|
// wrap up long words that dont fit in the page
|
||||||
|
document.body.style.overflowWrap = 'break-word';
|
||||||
|
|
||||||
|
var block_styles = {
|
||||||
|
"run-in":1, "block":1, "table-row-group":1, "table-column":1, "table-column-group":1,
|
||||||
|
"table-header-group":1, "table-footer-group":1, "table-row":1, "table-cell":1,
|
||||||
|
"table-caption":1, "inline-block:":1
|
||||||
|
};
|
||||||
|
for (const img of document.images) {
|
||||||
|
var style = window.getComputedStyle(img);
|
||||||
|
if (style.maxHeight === 'none') img.style.maxHeight = '100vh';
|
||||||
|
if (style.maxWidth === 'none') img.style.maxWidth = '100vw';
|
||||||
|
if (block_styles[style.display]) {
|
||||||
|
img.style.pageBreakInside = 'avoid';
|
||||||
|
img.style.breakInside = 'avoid';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
|
@ -60,6 +60,13 @@ def data_as_pdf_doc(data):
|
|||||||
return ans
|
return ans
|
||||||
|
|
||||||
|
|
||||||
|
def preprint_js():
|
||||||
|
ans = getattr(preprint_js, 'ans', None)
|
||||||
|
if ans is None:
|
||||||
|
ans = preprint_js.ans = P('pdf-preprint.js', data=True).decode('utf-8')
|
||||||
|
return ans
|
||||||
|
|
||||||
|
|
||||||
def last_tag(root):
|
def last_tag(root):
|
||||||
return tuple(root.iterchildren('*'))[-1]
|
return tuple(root.iterchildren('*'))[-1]
|
||||||
|
|
||||||
@ -196,6 +203,9 @@ class Renderer(QWebEnginePage):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def print_to_pdf(self):
|
def print_to_pdf(self):
|
||||||
|
self.runJavaScript(preprint_js(), self.start_print)
|
||||||
|
|
||||||
|
def start_print(self, *a):
|
||||||
self.printToPdf(self.printing_done, self.page_layout)
|
self.printToPdf(self.printing_done, self.page_layout)
|
||||||
|
|
||||||
def printing_done(self, pdf_data):
|
def printing_done(self, pdf_data):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user