博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图片加水印 PDF取缩略图
阅读量:5030 次
发布时间:2019-06-12

本文共 8532 字,大约阅读时间需要 28 分钟。

linux下java推送pdf文件到打印机方案汇总

方案一,将pdf转换成图片然后打印图片
PDF转换成图片的方法
使用PDFBox开元jar包
需要导入pdfbox-1.8.4.jar 和pdfbox-app-1.8.4.jar 两个jar文件

public static List
PdfToImage(String pdfFile) { try { String outputPrefix = pdfFile.substring(0, pdfFile.length() - 4); String imageFormat = "jpg";// 格式 PDDocument document = PDDocument.load(pdfFile); PDFImageWriter imageWriter = new PDFImageWriter(); int count = document.getNumberOfPages(); imageWriter.writeImage(document, imageFormat, "", 1, count, outputPrefix, 1, 170); document.close(); // 参数1-内部PDF文档,参数2-图片格式,参数3-密码,参数4-起始页,参数5-结束页,参数6-输出文件名,参数7-输出的图片色深--类型,参数8-还没研究 List
imagelist = new ArrayList
(); for (int i = 1; i <= count; i++) { String filepath = outputPrefix + i + ".jpg"; imagelist.add(filepath); } return imagelist; } catch (Exception e) { return null; } }

 

 

linux命令打印图片方法

"lp -d "+ printerName+ " -o scaling=100 -o fitplot -o page-botton=20  -o page-top=0 "+ jpgfile;
另附图片添加水印的方法

import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.Image;import java.awt.geom.AffineTransform;import java.awt.image.AffineTransformOp;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;/** * 图片工具类, 图片水印,文字水印,缩放,补白等 * @author Carl He */public class ImageUtils {    /**图片格式:JPG*/    private static final String PICTRUE_FORMATE_JPG = "jpg";        private ImageUtils(){}    /**     * 添加图片水印     * @param targetImg 目标图片路径,如:C://myPictrue//1.jpg     * @param waterImg  水印图片路径,如:C://myPictrue//logo.png     * @param x 水印图片距离目标图片左侧的偏移量,如果x<0, 则在正中间     * @param y 水印图片距离目标图片上侧的偏移量,如果y<0, 则在正中间     * @param alpha 透明度(0.0 -- 1.0, 0.0为完全透明,1.0为完全不透明)*/    public final static void pressImage(String targetImg, String waterImg, int x, int y, float alpha) {            try {                File file = new File(targetImg);                Image image = ImageIO.read(file);                int width = image.getWidth(null);                int height = image.getHeight(null);                BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);                Graphics2D g = bufferedImage.createGraphics();                g.drawImage(image, 0, 0, width, height, null);                            Image waterImage = ImageIO.read(new File(waterImg));    // 水印文件                int width_1 = waterImage.getWidth(null);                int height_1 = waterImage.getHeight(null);                g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));                                int widthDiff = width - width_1;                int heightDiff = height - height_1;                if(x < 0){                    x = widthDiff / 2;                }else if(x > widthDiff){                    x = widthDiff;                }                if(y < 0){                    y = heightDiff / 2;                }else if(y > heightDiff){                    y = heightDiff;                }                g.drawImage(waterImage, x, y, width_1, height_1, null); // 水印文件结束                g.dispose();                ImageIO.write(bufferedImage, PICTRUE_FORMATE_JPG, file);            } catch (IOException e) {                e.printStackTrace();            }    }    /**     * 添加文字水印     * @param targetImg 目标图片路径,如:C://myPictrue//1.jpg     * @param pressText 水印文字, 如:中国证券网     * @param fontName 字体名称,    如:宋体     * @param fontStyle 字体样式,如:粗体和斜体(Font.BOLD|Font.ITALIC)     * @param fontSize 字体大小,单位为像素     * @param color 字体颜色     * @param x 水印文字距离目标图片左侧的偏移量,如果x<0, 则在正中间     * @param y 水印文字距离目标图片上侧的偏移量,如果y<0, 则在正中间     * @param alpha 透明度(0.0 -- 1.0, 0.0为完全透明,1.0为完全不透明)     * @param degree 水印图片旋转角度*/    public static void pressText(String targetImg, String pressText, String fontName, int fontStyle, int fontSize, Color color, int x, int y, float alpha,Integer degree) {        try {            File file = new File(targetImg);                        Image image = ImageIO.read(file);            int width = image.getWidth(null);            int height = image.getHeight(null);            BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);            Graphics2D g = bufferedImage.createGraphics();            g.drawImage(image, 0, 0, width, height, null);            g.setFont(new Font(fontName, fontStyle, fontSize));            g.setColor(color);            if (null != degree) {                 // 设置水印旋转                 g.rotate(Math.toRadians(degree), (double) width / 2, (double) height / 2);             }            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));                        int width_1 = fontSize * getLength(pressText);            int height_1 = fontSize;            int widthDiff = width - width_1;            int heightDiff = height - height_1;            if(x < 0){                x = widthDiff / 2;            }else if(x > widthDiff){                x = widthDiff;            }            if(y < 0){                y = heightDiff / 2;            }else if(y > heightDiff){                y = heightDiff;            }                        g.drawString(pressText, x, y + height_1);            g.dispose();            ImageIO.write(bufferedImage, PICTRUE_FORMATE_JPG, file);        } catch (Exception e) {            e.printStackTrace();        }    }        /**     * 获取字符长度,一个汉字作为 1 个字符, 一个英文字母作为 0.5 个字符     * @param text     * @return 字符长度,如:text="中国",返回 2;text="test",返回 2;text="中国ABC",返回 4.*/    public static int getLength(String text) {        int textLength = text.length();        int length = textLength;        for (int i = 0; i < textLength; i++) {            if (String.valueOf(text.charAt(i)).getBytes().length > 1) {                length++;            }        }        return (length % 2 == 0) ? length / 2 : length / 2 + 1;    }    /**     * 图片缩放     * @param filePath 图片路径     * @param height 高度     * @param width 宽度     * @param bb 比例不对时是否需要补白*/    public static void resize(String filePath, int height, int width, boolean bb) {        try {            double ratio = 0; //缩放比例                File f = new File(filePath);               BufferedImage bi = ImageIO.read(f);               Image itemp = bi.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH);               //计算比例               if ((bi.getHeight() > height) || (bi.getWidth() > width)) {                   if (bi.getHeight() > bi.getWidth()) {                       ratio = (new Integer(height)).doubleValue() / bi.getHeight();                   } else {                       ratio = (new Integer(width)).doubleValue() / bi.getWidth();                   }                   AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);                   itemp = op.filter(bi, null);               }               if (bb) {                   BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);                   Graphics2D g = image.createGraphics();                   g.setColor(Color.white);                   g.fillRect(0, 0, width, height);                   if (width == itemp.getWidth(null))                       g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);                   else                      g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);                   g.dispose();                   itemp = image;               }            ImageIO.write((BufferedImage) itemp, "jpg", f);           } catch (IOException e) {            e.printStackTrace();        }    }    public static void main(String[] args) throws IOException {//        pressImage("C://pic//jpg", "C://pic//test.gif", 5000, 5000, 0f);        pressText("d:/CA_SALES_printed_src1_target1.jpg", "This is testing paper.", "Arial", Font.BOLD|Font.ITALIC, 140, Color.BLUE, 670, 800, 0.4f,-45);//        resize("C://pic//4.jpg", 1000, 500, true);        System.out.println("ok");    }}

 

方案二,利用linux命令打印pdf
"pdftops "+savedirpath+" - | lp -d "+printername+" -o scaling=97 -o fitplot -o page-botton=0 -o page-left=15 -o page-right=15 -o page-top=40";

转载于:https://www.cnblogs.com/geminer/p/4077912.html

你可能感兴趣的文章
Oracle 体系结构之ORACLE物理结构
查看>>
ORA-12538: TNS: no such protocol adapter
查看>>
盒子模型
查看>>
局域网协议
查看>>
[HNOI2012]永无乡 线段树合并
查看>>
Spring整合hibernate:3、使用XML进行声明式的事务管理
查看>>
SqlServer之Convert 函数应用格式化日期(转)
查看>>
软件测试领域中的10个生存和发展技巧
查看>>
Camera前后摄像头同时预览
查看>>
HDU 1856
查看>>
课堂作业01--架构师的职责
查看>>
iOS计算富文本(NSMutableAttributedString)高度
查看>>
2017/09/15 ( 框架2)
查看>>
Centos下源码安装git
查看>>
gulp-rev-append md5版本号
查看>>
IO流之File类
查看>>
sql 基础语句
查看>>
CF717A Festival Organization(第一类斯特林数,斐波那契数列)
查看>>
oracle直接读写ms sqlserver数据库(二)配置透明网关
查看>>
控件发布:div2dropdownlist(div模拟dropdownlist控件)
查看>>