Batik SVG 到 PDF - PDFTranscoder - 页面大小 A4
Batik SVG to PDF - PDFTranscoder - Page Size A4
我使用 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 的页面大小。我该怎么做?
我尝试了一些关键提示但没有效果。
我最近遇到了同样的问题。这可能无法完全解决您的问题,但我至少能够生成具有以下 Groovy(几乎 Java) 代码:
...
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)
希望对您有所帮助。
您可以计算 PDFTranscoder
transcodinghints
的值。所以 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。
我使用 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 的页面大小。我该怎么做?
我尝试了一些关键提示但没有效果。
我最近遇到了同样的问题。这可能无法完全解决您的问题,但我至少能够生成具有以下 Groovy(几乎 Java) 代码:
...
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)
希望对您有所帮助。
您可以计算 PDFTranscoder
transcodinghints
的值。所以 A4 是 210mm x 297mm。
PDF.Transcoder.KEY_PIXEL_TO_MILLIMETER
的默认值为 0.264583(参见 Documentation)。
现在计算以下值:
KEY_WIDTH
: 210/0.264583=793.7KEY_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。