- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 pdfbox 2.0.21 来(物理地)打印可能具有混合页面尺寸的 PDF 文件,包括非标准尺寸,例如 8.7"x11.3",它可以在不缩放的情况下打印在合法尺寸或更大的纸张上。 pdf 由许多不同的员工以不同的方式创建(Acrobat DC,从 Word 保存,打印到 pdf,由我们的文档系统生成......)并发送给我的团队打印和邮寄。该卷不允许我们单独检查它们,最终我们将我们的应用程序指向一个文件夹,它会打印那里的所有内容。我更愿意创建一个 PrinterJob 或 PDFPageable 来根据需要自动缩放所有页面,但无法让它工作。
public class PDPrn {
public static void main(String[] args) {
try (PDDocument pdf = PDDocument.load(new File("foo.pdf"))) {
PrinterJob job = PrinterJob.getPrinterJob();
Paper paper = new Paper();
Paper.setSize(612, 792); // letter size
paper.setImageableArea(36, 36, paper.getWidth() - 72, paper.getHeight() - 72); // 0.5in margins
PageFormat format = new PageFormat();
format.setPaper(paper);
PDFPageable pageable = new PDFPageable(pdf);
//doesn't scale down pages
//printer will ask for legal and cutoff bottom when forced to use letter
pageable.append(new PDFPrintable(pdf, Scaling.SCALE_TO_FIT), format);
job.setPageable(pageable);
try {
job.print();
} catch (PrinterException pe) {
}
pdf.close();
} catch (IOException ioe) {
}
}
}
我尝试遍历每个页面并直接缩小任何大于字母的内容,但失败了,但这会以令人费解的方式在页面上四处移动内容。
public class PDPrn {
public static void main(String[] args) {
try (PDDocument pdf = PDDocument.load(new File("foo.pdf"))) {
PrinterJob job = PrinterJob.getPrinterJob();
PDFPageable pageable = new PDFPageable(pdf);
PDPageTree tree = pdf.getDocumentCatalog().getPages();
Iterator<PDPage> iterator = tree.iterator();
while (iterator.hasNext()) {
PDPage page = iterator.next();
if (page.getMediaBox().getWidth() !=612 || page.getMediaBox().getHeight() != 792) {
PDPageContentStream contentStream = new PDPageContentStream(pdf, page,
PDPageContentStream.AppendMode.PREPEND, false);
//these are the wrong scaling factors but they do shrink oversized pages
//however the shrunk content is moved far down the page and runs off the bottom
//printer still asks for legal and cuts off bottom when forced to use letter
//edit: these floats should probably be smaller
//to account for margins, but the result is still
//offset significantly below the upper left
contentStream.transform(Matrix.getScaleInstance(612f / page.getMediaBox().getWidth(),
792f / page.getMediaBox().getHeight()));
//round figures, a large positive Y moves the content upward
//but not cleanly to the upper left
//whereas a large negative Y moves the content down and cuts off the bottom
//but does print on letter without the printer complaining about size
contentStream.transform(Matrix.getTransformInstance(0f, 250f);
contentStream.close();
}
}
job.setPageable(pageable);
try {
job.print();
} catch (PrinterException pe) {
}
pdf.close();
} catch (IOException ioe) {
}
}
}
使用具有 MediaName、MediaSizeName 和 MediaTray 常量的各种组合的属性集也不会导致减少,打印机会停止并要求使用 legal 纸张,并在被迫打印字母时切掉底部。
如何使用 pdfbox 2.0 在打印时将单个超大页面正确缩小为字母大小?
编辑:通过将页面的 MediaBox 设置为 PDRectangle.LETTER,我能够确保打印机不会要求提供合法纸张,并且左下角的内容流源可见。现在只需要使用正确的数学方法来获取比例因子并可能影响边距,使用 ImageableArea 或 CropBox?
public class PDPrn {
public static void main(String[] args) {
try (PDDocument pdf = PDDocument.load(new File("foo.pdf"))) {
PrinterJob job = PrinterJob.getPrinterJob();
PDFPageable pageable = new PDFPageable(pdf);
PDPageTree tree = pdf.getDocumentCatalog().getPages();
Iterator<PDPage> iterator = tree.iterator();
while (iterator.hasNext()) {
PDPage page = iterator.next();
if (page.getMediaBox().getWidth() !=612 || page.getMediaBox().getHeight() != 792) {
PDPageContentStream contentStream = new PDPageContentStream(pdf, page,
PDPageContentStream.AppendMode.PREPEND, false);
//these are the wrong scaling factors but they do shrink oversized pages
contentStream.transform(Matrix.getScaleInstance(0.5f,0.5f));
page.setMediaBox(PDRectangle.LETTER); // make the page letter size with shrunk content origin in lower left
contentStream.close();
}
}
job.setPageable(pageable);
try {
job.print();
} catch (PrinterException pe) {
}
pdf.close();
} catch (IOException ioe) {
}
}
}
最佳答案
设置新的 MediaBox 大小确实足以将缩放后的内容流推送到较小的页面中。比较源宽度/高度和目标宽度/高度的红利让我找到一个合适的比例因子应用于两侧,保持纵横比。页面本身产生的边距看起来可以接受我们的使用,所以我现在不担心精细控制,只需将纸张设置为 0 边距并放手。 PDFPrintable 构造函数中的 SHRINK_TO_FIT 似乎没有做任何事情,我不确定它在什么情况下会起作用。
public class PDPrn {
public static void main(String[] args) {
try (PDDocument pdf = PDDocument.load(new File("foo.pdf"))) {
PrinterJob job = PrinterJob.getPrinterJob();
PDPageTree tree = pdf.getDocumentCatalog().getPages();
Iterator<PDPage> iterator = tree.iterator();
while (iterator.hasNext()) {
PDPage page = iterator.next();
if (page.getMediaBox().getWidth() > 612 || page.getMediaBox().getHeight() > 792) {
float fWidth = 612f / page.getMediaBox().getWidth();
float fHeight = 792f / page.getMediaBox().getHeight();
float factor = 0f;
if (fWidth > fHeight) {
factor = fHeight;
} else {
factor = fWidth;
}
PDPageContentStream contentStream = new PDPageContentStream(pdf, page,
PDPageContentStream.AppendMode.PREPEND, false);
contentStream.transform(Matrix.getScaleInstance(factor, factor));
contentStream.close();
page.setMediaBox(PDRectangle.LETTER);
}
}
Paper paper = new Paper();
paper.setSize(612, 792);
paper.setImageableArea(0, 0, 612, 792);
PageFormat pageFormat = new PageFormat();
pageFormat.setPaper(paper);
Book book = new Book();
book.append(new PDFPrintable(pdf, Scaling.SHRINK_TO_FIT), pageFormat, pdf.getNumberOfPages());
job.setPageable(book);
try {
job.print();
} catch (PrinterException pe) {
}
pdf.close();
} catch (IOException ioe) {
}
}
}
关于java - PDFBOX 2.0 : How can I scale large page sizes to letter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64900577/
ValueError Traceback (most recent call last) in 23 out
在 CSS 中,我从来没有真正理解为什么会发生这种情况,但每当我为某物分配 margin-top:50% 时,该元素就会被推到页面底部,几乎完全消失这一页。我假设 50% 时,该元素将位于页面的中间位
我正在尝试在 pyTorch 中训练我的第一个神经网络(我不是程序员,只是一个困惑的化学家)。 网络本身应该采用 1064 个元素向量并用 float 对它们进行评级。 到目前为止,我遇到了各种各样的
我有一个简单的问题。如何在 3 个维度上移动线性阵列?这似乎太有效了,但在 X 和 Y 轴上我遇到了索引问题。我想这样做的原因很简单。我想创建一个带有 block 缓冲区的体积地形,所以我只需要在视口
我正在尝试运行我购买的一本关于 Pytorch 强化学习的书中的代码。 代码应该按照本书工作,但对我来说,模型没有收敛,奖励仍然为负。它还会收到以下用户警告: /home/user/.local/li
我目前正在使用 this repo使用我自己的数据集执行 NLP 并了解有关 CNN 的更多信息,但我一直遇到有关形状不匹配的错误: ValueError: Target size (torch.Si
UIScrollView 以编程方式设置,请不要使用 .xib 文件发布答案。 我的 UIScrollView 位于我的模型类中,所以我希望代码能够轻松导入到另一个项目中,例如。适用于 iPad 或旋
我在我的 Ruby on Rails 应用程序(版本 4.3.1)中使用 Bootstrap gem。我最近发现了响应式字体大小功能 (rfs)。根据 Bootstrap 文档,它刚刚在 4.3 版中
这个问题不太可能帮助任何 future 的访客;它仅与一个小地理区域、一个特定时刻或一个非常狭窄的情况相关,而这些情况通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visit the
size 之间的语义区别是什么?和 sizeIs ?例如, List(1,2,3).sizeIs > 1 // true List(1,2,3).size > 1 // true Luis 在 c
我想从 div 中删除一些元素属性。我的 div 是自动生成的。我想遍历每个 div 和子 div,并想删除所有 font-size (font-size: Xpx)和 size里面font tag
super ,对 Python 和一般编程 super 新手。我有一个问题应该很简单。我正在使用一本使用 Python 3.1 版的 python 初学者编程书。 我目前正在写书中的一个程序,我正在学
我无法从 NativeBase 更改缩略图的默认大小。我可以显示默认圆圈,即小圆圈和大圆圈,但我想显示比默认大小更大的圆圈。这是我的缩略图代码: Prop 大小不起作用,缩略图仍然很小。 我的 Na
我是pytorch的新手。在玩张量时,我观察到了两种类型的张量- tensor(58) tensor([57.3895]) 我打印了它们的形状,输出分别是 - torch.Size([]) torch
这是我的 docker images 命令的输出: $ docker images REPOSITORY TAG IMAGE ID CREATED
来自 PriorityQueue 的代码: private E removeAt(int i) { assert i >= 0 && i < size; modCount++;
首先,在我的系统上保留以下内容:sizeof(char) == 1 和 sizeof(char*) == 4。很简单,当我们计算下面类的总大小时: class SampleClass { char c
我正在编写一个游戏来查找 2 个图像之间的差异。我创建了 CCSprite 的子类 Spot。首先我尝试创建小图像并根据其位置添加自身,但后来我发现位置很难确定,因为很难避免 1 或 2 个像素的偏移
我有一个 Tumblr Site每个帖子的宽度由标签决定。 如果一篇文章被标记为 #width200,CSS 类 .width200 被分配。 问题是,虽然帖子的宽度不同,但它们都使用主题运算符加载相
这个问题在这里已经有了答案: What is the ideal growth rate for a dynamically allocated array? (12 个答案) 关闭 8 年前。 我
我是一名优秀的程序员,十分优秀!