Batik SVG到PDF - PDFTranscoder - 页面大小A4

时间:2016-12-27 15:22:33

标签: java pdf svg batik

我成功地使用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 个答案:

答案 0 :(得分:1)

我最近遇到了同样的问题。这可能无法完全解决您的问题,但我至少能够使用以下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)

希望这有帮助。

答案 1 :(得分:0)

您可以计算PDFTranscoder转码提示的值。因此A4为210mm x 297mm。 PDF.Transcoder.KEY_PIXEL_TO_MILLIMETER的默认值为0.264583(请参见Documentation)。

现在计算以下值:

  • 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。