生成 PDF 全攻略【1】初体验

   
 经历过多少踩坑,翻看过多少类似博客,下载过些微版本的Jar,才能检索出科学的代码书写格局,才能落到实处项目老总须求分析书中的功效点。

弹指间Windows 8.1已经昭示了多少个多月,以前因为开发需求对Windows
8.1新特性开展过零散的读书和选择,一直尚未静下心来系统的上学过。目前机关有几名新同事加入,需求展开Windows
商店应用开发的作育,所以借那个机遇,重新梳理一下Windows 8.1
应用开发的知识。闲言碎语不多讲,接下去早先率先站,成立第二个使用。

     本文借三次 JavaEE
生成PDF的震荡的贯彻进程,描述中小集团程序员的不利成长之路。

第一大家看一下支出条件必要:Windows 8.1 + Visual Studio 2013

   
 俺上边只所以将成熟大公司排除在外的原由是,大商厦一般都有饱经风霜的产品线和技能积淀。

进而大家新建一个Windows 8.1
商店应用的序列,起名为HelloWorld(好啊,那或许是用的最多的名字了吗),来考察一下项目的组成

   
 至少会有完美的建构师团队,有像扫地神僧那样的牛人隐士……

图片 1

   
 公司中下等程序员碰到标题,能找到在此从前完成过的好像功用的代码作为参照,也能咨询技术老板。

  • Properties目录中的AssemblyInfo.cs文件决定程序集的正常化音讯,如程序集标题、描述、公司、版权和本子等;
  • 引用是豪门都很熟谙的一个目录,大家对其他程序集的引用都会列在这边,大家得以添加引用或删除引用;
  • Assets目录存放的是运用图标和开行显示器相关的图样文件;
  • App.xaml包涵了使用所需的资源,App.xaml.cs为利用提供进口;
  • HelloWorld_TemporaryKey.pfx是选择的数字证书文件;
  • MainPage.xaml是行使启动后出现的首先个界面;
  • Package.appxmainfest是应用程序的清单文件,可以在文件中装置使用名称、图标、入口、成效等等。

   
 小商店是绝非那种幸福的,似乎昨日清晨”生成PDF”须要到,工期一天,明天要给客户看。

接下去我们详细说爱他美(Aptamil)下清单文件:

     第一反响是找谷歌,关键字
“Java生成PDF”,博客不是一般的多,下边简述二种达成方式和完成进度中相遇的标题。

图片 2

     (目录已列在地方,通过搜索引擎进来的同伙,看看上边列表中是否有能缓解您难题的,有点到对应的小节,没有就倒闭看下一条搜索记录吧….)

  1. 应用程序

1.IText 生成复杂PDF

   
谷歌(谷歌(Google))中占比例最大的Java
生成PDF落成类库,也是过多技能博客中关系到技术,官网:http://itextpdf.com/

   
开源中国中的介绍:http://www.oschina.net/p/itext,好嘞,既然都推荐那就选取那类库看看。

    下载 Jar
也是琳琅满目,让您挑花眼,从 2.1–5.5
应有尽有,有些论坛下载东西还须要注册o(︶︿︶)o 唉。

   
那里运用的是新型的版本
5.5,仔细阅读下外人的技艺博客或者是合法文档,编码起来实在不是很棘手。作者将事情抽象完结的类如下:

public class createSimplePDF {
    private Font FontChinese;
    public void simplePDF() {
        try {
            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            FontChinese = new Font(bfChinese, 12, Font.NORMAL);
            Document document = new Document();
            PdfWriter.getInstance(document, new FileOutputStream("F:\\Garbage\\Hello simplePDF.pdf"));
            document.open();

            PdfPTable table = new PdfPTable(4);
            table.addCell(getCell("姓名", 1, 1));
            table.addCell(getCell("", 1, 1));
            table.addCell(getCell("编号", 1, 1));
            table.addCell(getCell("", 1, 1));

            table.addCell(getCell("部门", 1, 1));
            table.addCell(getCell("", 1, 1));
            table.addCell(getCell("岗位名称", 1, 1));
            table.addCell(getCell("", 1, 1));

            table.addCell(getCell("到职日期", 1, 1));
            table.addCell(getCell("", 1, 1));
            table.addCell(getCell("预定离职日期", 1, 1));
            table.addCell(getCell("", 1, 1));

            table.addCell(getCell("事由", 1, 3));
            table.addCell(getCell("", 3, 3));

            table.addCell(getCell("部门意见", 1, 3));
            table.addCell(getCell("", 3, 3));
            document.add(table);
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private PdfPCell getCell(String cellValue, int colspan, int rowSpan) {
        PdfPCell cell = new PdfPCell();
        try {
            cell = new PdfPCell(new Phrase(cellValue, FontChinese));
            cell.setRowspan(rowSpan);
            cell.setColspan(colspan);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cell;
    }
}

主要安装使用的称谓、语言、接济旋转、协理的文告格局等特性。其中与Windows
8 较大的两样是可以安装最小宽度,Windows
8中处于Snapped状态的拔取固定宽度为320px,而Windows 8.1
中用户可以通过拖拽改变Snapped状态应用的增幅,同时开发者可以安装最小宽度为320px、500px
或 默许值。

2.IText添加对粤语的协理

   高兴的将代码编写成功,生成后中文不见了,注意是不见了,不是乱码。

 
 仔细考察报错,发现IText必要丰裕别的itext-asian.jar去支撑汉语,那就添加吧。

 
 因为自己IText使用的是最新的5.5版本,导致其他低版本的 itext-asian.jar
不可以支撑(具体原因是5.0上述的itext包名暴发了变化),抛出的失实如下:

   Font ‘STSong-Light’ with
‘UniGB-UCS2-H’ is not recognized

   最终在一篇博客中寻获解决格局,尝试后生效,就是上述代码中:

 BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
 FontChinese = new Font(bfChinese, 12, Font.NORMAL);

 
小编那里将最新的IText.jar 和
配套的中文协助  itext-asian.jar,放置百度云盘,节省其他同学找 Jar
时间。

 
云盘地址:http://pan.baidu.com/s/1bqs4km  提取密码: 99eg

 
最后落实的截图如下:

图片 3

 
其实项目中最终要兑现的报表的规范比这几个纷纭的多,80%费用时间主要是在调整体制,编译输出—>看样式,到此地其实必要已经可以落到实处了。

 
作者也是用那种情势贯彻的,毕竟是给客户演示的。

 
这里要谢谢的是这位博主的博客,里面有详细的IText
设置段落,标题,表格,加密……….只要您能在生成PDF想到的,那其间大多都有。

 
博客地址:http://rensanning.iteye.com/blog/1538689

图片 4

3.iTextRenderer(Flying Saucer) HTML转PDF

  Flying saucer
做为HTML渲染PDF的开源项目(老外起名字我也是醉了,想起一出是一出,HTML
渲染 PDF起个”飞行器”)。

  其中的中坚类 iTextRenderer
帮衬将HTML生成PDF。

  iTextRenderer 在借助 iText
的根底上,单独完毕了HTML渲染PDF,基本上能落到实处 CSS
2.1的全体性,并且完全符合 W3C 规范。

 
借使运用那种措施,编译输出调全部制什么的,就让它见鬼去啊。

  具体的流水线如下图:

  图片 5

   
 那才是伟人上的缓解方案有木有,模版引擎现在也是玲琅满目(freemark,velocity…….),具体看你们项目吧。

   
 那样就不用为繁琐的体制发愁了,定义模版前端查看,注入数据,生成PDF,主旨代码:

                ITextRenderer iTextRenderer = new ITextRenderer();
                iTextRenderer.getFontResolver().addFont("C:/Windows/Fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                iTextRenderer.setDocument(new File(currWebcontentPath + reviewHtmlPath).toURI().toString());
                iTextRenderer.layout();
                String pdfName = getPdfName(testVO);
                OutputStream fileOutputStream = new FileOutputStream(currWebcontentPath + pdfPath + pdfName);
                iTextRenderer.createPDF(fileOutputStream);
                iTextRenderer.finishPDF();

   
那一个中须要缓解的难题还有变化的HTML存放的岗位,然后就是跳转到下载页面了,若是您是JavaEE后端开发,那一个难点应有都难不到你。

   
使用的iTextRenderer的jar同样也置于: http://pan.baidu.com/s/1kTOpM0R 
提取密码: y9y2

   
具体参考的博客有:

 
  http://www.tuicool.com/articles/qAFNFja

 
  http://downpour.iteye.com/blog/509417

   
http://my.oschina.net/u/603602/blog/268611?fromerr=bxBuHc6W

 2. 凸现资产

重大安装使用的各类图标和启动屏幕,所用图片都存放在前边提到的Assets目录中,与Windows
8较为分化的是足以设置使用的默认大小,还足以安装使用的310 * 310徽标。

图片 6

  1. 功能

重中之重指定应用可选拔的系统成效,例如大家必要获得用户地方坐标,那大家须要勾选“地点”功能。

图片 7

  1. 声明

重大增加应用的可用申明,例如咱们必要贯彻搜索协议,就要添加“搜索”注解,然后填写相关属性。

图片 8

  1. 内容 URI

最主要增加可向应用程序发送ScriptNotify事件的HTTPS URI。因为Windows 8.1
中不匡助 WebView 控件的 AllowedScriptNotifyUris、AnyScriptNotifyUri 和
AllowedScriptNotifyUrisProperty。所以同意引发ScriptNotify事件的URI都亟待列在此处。

图片 9

  1. 打包

要害指定安装包的特性新闻

图片 10

 

下一场咱们对MainPage做一些改动,尝试调试应用程序。大家在页面中进入一个文本控件:

<Page
    x:Class="HelloWorld.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:HelloWorld"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <TextBlock Text="My First App, Hello World." HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/>
    </Grid>
</Page>

接下去我们就可以调剂应用了,在调试此前,我们先来看望调试方法。Windows
商店应用的调节方法有:模拟器、本地计算机 和
远程计算机。模拟器和本土电脑,顾名思义,就是在本机启动模拟器调试和在本机调试,而远程统计机多用于在一而再到本机的机械上调节时。那里大家挑选在模拟器调试,运行效果如下图:
图片 11

运作后,模拟器的施用界面中突显出我们添加的文本框。到此地大家的率先个利用的创导和调试就做到了,谢谢。

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图