itext实现word转pdf,添加水印倾斜铺满全屏,禁止修改和复制
来源:互联网 发布:java内存泄露场景 编辑:程序博客网 时间:2024/06/06 02:01
public class test { static final int wdFormatPDF = 17;// PDF 格式 private static int interval = -5; /** * word转pdf * @param fromAddress 待转文件地址 * @param toAddress 新文件地址 */ public static void wordToPdf(String fromAddress,String toAddress){ ActiveXComponent ax = null; try { long startTime = System.currentTimeMillis(); /* * 创建不同的控件调用不同的值 * Word——Word.Application * Excel——Excel.Application * Powerpoint——Powerpoint.Application * Outlook——Outlook.Application * */ ax = new ActiveXComponent("Word.Application"); /*设置打开word文档不可见*/ ax.setProperty("Visible", false); //获取Word文档中所有内容 Dispatch docs = ax.getProperty("Documents").toDispatch(); //打开word文档,并设置word为不可编辑和不需确认 Dispatch doc = Dispatch.call(docs, "Open", fromAddress,// FileName false,// ConfirmConversions true // ReadOnly ).toDispatch(); File tofile = new File(toAddress); if (tofile.exists()) { tofile.delete(); } //word文件另存为pdf文件 Dispatch.call(doc,// "SaveAs", // toAddress, // FileName wdFormatPDF); //关闭word文档 Dispatch.call(doc, "Close", false); long endTime = System.currentTimeMillis(); System.out.println("转化完成,总共耗时" + (endTime - startTime) + "ms。"); } catch (Exception e) { System.out.println("========Error:文档转换失败:" + e.getMessage()); } finally { if (ax != null) ax.invoke("Quit", new Variant[]{}); } } public static void waterMark(String inputFile, String outputFile, String waterMarkName, String password) { try { PdfReader reader = new PdfReader(inputFile); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream( outputFile)); byte[] ownerPassword = password.getBytes(); stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_ASSEMBLY, false); stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_COPY, false); stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_DEGRADED_PRINTING, false); stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_FILL_IN, false); stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_MODIFY_ANNOTATIONS, false); stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_MODIFY_CONTENTS, false); stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_PRINTING, false); stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_SCREENREADERS, false); stamper.setEncryption(null, ownerPassword, PdfWriter.DO_NOT_ENCRYPT_METADATA, true); stamper.setViewerPreferences(PdfWriter.HideToolbar|PdfWriter.HideMenubar); BaseFont base = BaseFont.createFont("c://windows//fonts//simsun.ttc,1" , BaseFont.IDENTITY_H, BaseFont.EMBEDDED);// 使用系统字体 Rectangle pageRect = null; PdfGState gs = new PdfGState(); gs.setFillOpacity(0.3f); gs.setStrokeOpacity(0.4f); int total = reader.getNumberOfPages() + 1; JLabel label = new JLabel(); FontMetrics metrics; int textH = 0; int textW = 0; label.setText(waterMarkName); metrics = label.getFontMetrics(label.getFont()); textH = metrics.getHeight();//字符串的高, 只和字体有关 textW = metrics.stringWidth(label.getText());//字符串的宽 PdfContentByte under; for (int i = 1; i < total; i++) { pageRect = reader.getPageSizeWithRotation(i); // 计算水印X,Y坐标 float x = pageRect.getWidth() / 2; float y = pageRect.getHeight() / 2; under = stamper.getOverContent(i); under.saveState(); under.setGState(gs); under.beginText(); under.setFontAndSize(base, 15); // 水印文字成45度角倾斜 for (int height = interval + textH; height < pageRect.getHeight(); height = height + textH*8) { for (int width = interval + textW; width < pageRect.getWidth() + textW; width = width + textW) { under.showTextAligned(Element.ALIGN_LEFT , waterMarkName, width - textW, height - textH, 45); } } // 添加水印文字 under.endText(); } stamper.close(); } catch (Exception e) { e.printStackTrace(); } } public static void concatPDFs(List<InputStream> streamOfPDFFiles, OutputStream outputStream, boolean paginate) { Document document = new Document(); try { List<InputStream> pdfs = streamOfPDFFiles; List<PdfReader> readers = new ArrayList<PdfReader>(); int totalPages = 0; Iterator<InputStream> iteratorPDFs = pdfs.iterator(); // Create Readers for the pdfs. while (iteratorPDFs.hasNext()) { InputStream pdf = iteratorPDFs.next(); PdfReader pdfReader = new PdfReader(pdf); readers.add(pdfReader); totalPages += pdfReader.getNumberOfPages(); } // Create a writer for the outputstream PdfWriter writer = PdfWriter.getInstance(document, outputStream); document.open(); BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); PdfContentByte cb = writer.getDirectContent(); // Holds the PDF // data PdfImportedPage page; int currentPageNumber = 0; int pageOfCurrentReaderPDF = 0; Iterator<PdfReader> iteratorPDFReader = readers.iterator(); // Loop through the PDF files and add to the output. while (iteratorPDFReader.hasNext()) { PdfReader pdfReader = iteratorPDFReader.next(); // Create a new page in the target for each source page. while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) { document.newPage(); pageOfCurrentReaderPDF++; currentPageNumber++; page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF); cb.addTemplate(page, 0, 0); // Code for pagination. if (paginate) { cb.beginText(); cb.setFontAndSize(bf, 9); cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "" + currentPageNumber + " of " + totalPages, 520, 5, 0); cb.endText(); } } pageOfCurrentReaderPDF = 0; } outputStream.flush(); document.close(); outputStream.close(); } catch (Exception e) { e.printStackTrace(); } finally { if (document.isOpen()) document.close(); try { if (outputStream != null) outputStream.close(); } catch (IOException ioe) { ioe.printStackTrace(); } } } public static void main(String[] args) { try { String to = "C:/Desktop/to.pdf"; String wordUrl = "C:/Desktop/1501139857165.doc";File file = File.createTempFile("tempFile", ".pdf");wordToPdf(wordUrl,file.getPath());waterMark(file.getPath(), to, "圣贤庸才,大人小心!!!!!!!","000000");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} } }
效果:
阅读全文
0 0
- itext实现word转pdf,添加水印倾斜铺满全屏,禁止修改和复制
- openOffice实现word转pdf和添加水印
- itext pdf 添加水印
- itext 5.3.0实现对pdf文件添加(文字和图片)水印
- 给任何view添加全屏倾斜水印
- 用iText给pdf添加水印图片
- iText中给pdf内容添加水印
- iText中给pdf内容添加水印
- 基于itext实现的pdf水印
- PHP实现word(office文件)转PDF的功能并添加水印
- itext pdf 水印
- itext pdf加水印
- Java通过IText导出word和pdf
- iText导出word、pdf
- iText实现html转pdf
- 利用Flying Saucer 和 iText 实现HTMl转PDF(java)
- 利用Flying Saucer 和 java iText 实现HTMl转PDF
- itext修改pdf.
- 机器学习第四课(padding)
- 数组模拟链表之P1160 队列安排
- Day8-27.Literals
- Spark以及生态圈介绍
- EasyStream系列1之rtsp转rtmp
- itext实现word转pdf,添加水印倾斜铺满全屏,禁止修改和复制
- Partition函数
- 剑指offer--链表中环的入口结点
- photoshop注册机,这个必须留下来
- tools:replace="android:icon, android:theme"
- 《程序员的修炼之道》笔记——4、足够好的软件
- shell 输入/输出重定向
- 进程间通信之消息队列
- 大数据Spark企业级实战版【学习笔记】----Spark速度为何如此快