繁体   English   中英

在Java中使用itext更改现有pdf的UserUnit

[英]Changing UserUnit of existing pdf with itext in java

我没有找到与该主题相关的任何内容,因此我正在使用此面板,希望能获得问题/帮助。

我所拥有的:我有一个很大的pdf文档(adobe读者说:21.399,4 x 15.123,7 mm,缩放系数,打开时约为屏幕填充的1.64%!)。 这是一张施工图,但这无关紧要。 当我使用崇高来分析结构时,我可以找到以下内容:

  • pdf版本为:1.6
  • CropBox [0.0 0.0 14400.0 10177.0]
  • /旋转0 /类型/页面/用户单位4.2125

我需要什么:较小的文档,由于尺寸较大,我无法继续处理文件

我试过的:第一步是使用iText将UserUnit减小为默认的“ 1”。 这应该使某些事情变得容易。 我在Java程序中的代码如下所示:

PdfReader reader = new PdfReader(inFile.getAbsolutePath());
try (FileOutputStream outStream = new FileOutputStream(outFile)) {
    PdfStamper pdfStamper = new PdfStamper(reader, outStream);
    PdfWriter writer = pdfStamper.getWriter();
    writer.setUserunit(1f);
    pdfStamper.close();
}

我尝试过的另一件事是:

PdfDictionary pageDict;
pageDict = reader.getCatalog();
pageDict.put(PdfName.USERUNIT, new PdfNumber(1f));

这两件事都不起作用,所以我的问题是:

  • 可以更改现有文件的UserUnits吗? 还是我需要创建一个具有所需属性的新文件,然后在新文件中写入现有pdf的内容?
  • 如果可能的话:我还需要做什么来更改UserUnits?

海德堡致以诚挚的问候D. Pfizenmaier

请看一下ScaleRotate示例。 它是为回答“ 在Itextsharp中旋转”同时保留评论的位置和方向而提供的 ,在此您可以找到有关用户单元的更多信息。

这是相关的代码:

PdfReader reader = new PdfReader(src);
int n = reader.getNumberOfPages();
PdfDictionary page;
for (int p = 1; p <= n; p++) {
    page = reader.getPageN(p);
    page.put(PdfName.USERUNIT, new PdfNumber(1f));
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
reader.close();

请注意,您正在使用getCatalog()文档的根目录,但是给变量赋予的名称听起来像是假定它是页面字典一样。 那行不通...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM