如何使用pdfbox将水印添加到横向文件中

时间:2016-07-21 14:45:41

标签: pdf pdfbox watermark apache-fop

我正在使用pdfbox 1.8.11和FOP为pdf:s添加水印。它适用于大多数输入pdf文件。 但是当文件处于横向时我遇到问题,水印将向右旋转90度。 我有可见签名的类似问题,它是固定的。感谢sign landscape file中的解决方案。任何想法如何使水印旋转工作?提前谢谢!

水印的原始图片是: Up arrow

FOP水印后图像旋转: image rotated

1 个答案:

答案 0 :(得分:0)

为迟到的答案道歉。 这里添加“水印”的想法是使用fop apache fop在原始pdf中添加一些变换。您可以从apache fop网站上获得精简的Java代码示例和模板示例。

无论如何,我也会在这里举例说明: 1.如何使用fop的java代码

import org.apache.fop.apps.*;
import org.xml.sax.*;
import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.sax.*;
import javax.xml.transform.stream.*;

class rendtest {

    private static FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
    private static TransformerFactory tFactory = TransformerFactory.newInstance();

    public static void main(String args[]) {
        OutputStream out;
        try {
            //Load the stylesheet
            Templates templates = tFactory.newTemplates(
                new StreamSource(new File(args[1])));

            //First run (to /dev/null)
            out = new org.apache.commons.io.output.NullOutputStream();
            FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
            Transformer transformer = templates.newTransformer();
            transformer.setParameter("page-count", "#");
            transformer.transform(new StreamSource(new File(args[0])),
                new SAXResult(fop.getDefaultHandler()));

            //Get total page count
            String pageCount = Integer.toString(driver.getResults().getPageCount());

            //Second run (the real thing)
            out = new java.io.FileOutputStream(args[2]);
            out = new java.io.BufferedOutputStream(out);
            try {
              foUserAgent = fopFactory.newFOUserAgent();
              fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
              transformer = templates.newTransformer();
              transformer.setParameter("page-count", pageCount);
              transformer.transform(new StreamSource(new File(args[0])),
                  new SAXResult(fop.getDefaultHandler()));
            } finally {
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. 对于我用于渲染风景的问题pdf:s,在fop模板中你只需要添加一个属性来告诉这个文件是横向布局。 该属性是设置reference-orientation =“90”。然后将正确应用fop模板中的其他定义。