当前位置: 首页 > 知识库问答 >
问题:

Batik SVG至PDF-PDF转换器-页面尺寸A4

罗昱
2023-03-14

我成功地使用Apache Batik将SVG文件转换为PDF。

以下代码用于生成 PDF:

import org.apache.fop.svg.PDFTranscoder;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
...

File svgFile = new File("./target/test.svg");
...

PDFTranscoder transcoder = new PDFTranscoder();
try (FileInputStream fileInputStream = new FileInputStream(svgFile); FileOutputStream fileOutputStream = new FileOutputStream(new File("./target/test-batik.pdf"))) {
    TranscoderInput transcoderInput = new TranscoderInput(fileInputStream);
    TranscoderOutput transcoderOutput = new TranscoderOutput(fileOutputStream);
    transcoder.transcode(transcoderInput, transcoderOutput);
}

现在我想影响生成的PDF的页面大小,所以我得到了A4的页面大小。我怎么能这么做呢?

我已经尝试了一些关键提示,但没有效果。

共有2个答案

吴涵育
2023-03-14

您可以计算PDFTranscoder代码转换提示的值。所以A4是210mm x 297mm。<code>PDF.Transcoder。KEY_PIXEL_TO_MILLIMETER的默认值为0.264583(请参阅文档)。

现在计算以下值:

  • KEY_WIDTH:210/0.264583=793.7
  • KEY_HEIGHT:297/0.264583=1122.52

因此,获取A4文档的代码将如下所示:

PDFTranscoder t = new PDFTranscoder();
t.addTranscodingHint(PDFTranscoder.KEY_HEIGHT, (float)1122.52);
t.addTranscodingHint(PDFTranscoder.KEY_WIDTH, (float)793.70);

您可以在Adobe Reader中检查大小并查看文档大小为210x297mm=A4。

萧繁
2023-03-14

我最近也遇到了同样的问题。这可能并不能完全解决您的问题,但我至少能够用以下Groovy(几乎是Java)代码生成一个具有页面正确纵横比(本例中为美国字母大小)的PDF:

...

TranscoderInput transcoderInput = new TranscoderInput(fileInputStream)
TranscoderOutput transcoderOutput = new TranscoderOutput(fileOutputStream)
PDFTranscoder transcoder = new PDFTranscoder()
int dpi = 100
transcoder.addTranscodingHint(PDFTranscoder.KEY_WIDTH, dpi * 8.5 as Float)
transcoder.addTranscodingHint(PDFTranscoder.KEY_HEIGHT, dpi * 11 as Float)
transcoder.transcode(transcoderInput, transcoderOutput)

希望这有帮助。

 类似资料:
  • 问题内容: 以下代码不适用于Apache poi 3.16。有人可以提供正确的解决方案吗,在我的项目中,有些人只能使用 例外: 问题答案: 这样做的主要问题是这些和不是项目的一部分。它们是由开发的,第一个版本的命名错误和。这些老班没有更新从2014年开始,需要版本 的 使用。 请使用更多 最新版本的fr.opensagres.poi.xwpf.converter.pdf,该版本可以使用最新的稳定版

  • 这是一个代码示例, 我犯的错误, [pdf.py:1629]Traceback(最近的最后一次调用):文件test.py,第22行,在pdfWriter.write(newFile)File"/home/ubuntu/Ritesh/work/lib/python3.5/site-包/PyPDF2/pdf.py",第482行,在写自己。_sweepIndirectReferences(extrana

  • 问题内容: 我对(N,)维数组和(N,1)维数组之间的转换有疑问。例如,y是(2,)维。 但是下面将显示y2为(2,1)维。 在不复制的情况下将y2转换回y的最有效方法是什么? 谢谢汤姆 问题答案: 为此工作 还请注意,除非需要复制新形状(在这里不需要这样做),否则它不会复制数据:

  • 让我先给你介绍一下我的项目。我有一个pdf,我需要使用PDFBox API将其转换为图像(一张图像对应一页),并使用PDFBox API将所有这些图像写入一个新的pdf。基本上,将pdf转换为pdf,我们称之为pdf转码。 现在,我有一些情况下,每件事都进展顺利,也就是说,转码pdf与原始pdf内容完全匹配,但只有1/10的情况是这样的,转码pdf的尺寸以某种方式被交换。例如,原始pdf-8.2x

  • 问题内容: 如何使用PDFBox查找(以毫米为单位)pdf页面的宽度和高度?目前,我正在使用此: 但结果是(不是毫米): 问题答案: PDF内的度量单位是磅,这是传统的图形行业度量单位。Adobe使用以下定义: 并且由于将一英寸定义为正好是25.4毫米(真的!),因此您可以使用以下公式将点数转换为毫米 顺便说一下,您的值将(宽松地)转换为A4纸张尺寸210 x 297毫米。(“松散”的原因有两个:

  • 我尝试使用iTextSharp创建一个多页pdf文档。我有一个包含自身方向(横向或纵向)的对象。当第一个对象包含需要横向模式的信息时,我用< code > Document doc = new Document(PageSize。A4.Rotate(),10f,10f,10f,0f)。这工作得很好,直到下一个元素是肖像模式!如果一个元素处于纵向模式,我再次设置页面大小:< code>doc。Set