精华内容
下载资源
问答
  • C# 之 读写PDF文件

    千次阅读 2020-08-21 08:41:09
    C# 之 读写PDF文件, Pdf相关dll下载; 解决System.NotSupportedException:“No data is available for encoding 1252.报错问题,

    一.iTextSharp库

    操作PDF文档需要使用iTextSharp对象,它是一个开源的PDF操作类库。该库中主要包括一个iTextSharp.dll程序集文件。

    pdf相关dll文件下载:
    官方下载
    网盘下载: 提取码: wffq

    下载后添加引用到控制台应用程序:右键“解决方案” – 选择“添加“ – 选择“引用” – 然后在弹窗中右下角选择“浏览”(找到你下载在的dll文件)-- 然后“勾选”“确定”,引用就添加完成了。
    111
    222

    然后添加using命名空间指令:

    using iTextSharp.text;
    using iTextSharp.text.pdf;
    

    二.程序集中主要类:

    1), iTextSharp.text.Document

    说明:创建一个文档实例。具有三个构造函数:

    public Document()
    public Document(Rectangle pageSize)
    public Document(Rectangle pageSize, int marginLeft, int marginRight, int marginTop, int marginBottom)
    

    常用方法:

    //添加标题
    public bool addTitle(String title);
    //添加主题
    public bool addSubject(String subject);
    //添加关键字
    public bool addKeywords(String keywords);
    //添加作者
    public bool addAuthor(String author);
    //添加文档的创建者
    public bool addCreator(String creator);
    //添加文档的创建程序
    public bool addProducer();
    //添加创建日期
    public bool addCreationDate();
    //打开文档
    public void open();
    //关闭文档
    public void close();
    

    2), iTextSharp.text.Paragraph

    说明:操作PDF文档中的文本。
    该类主要用于新建一个段落,该段落可以由一系列的块或短句构成,可以设置段落的行间距、对齐格式等。经常与类Chunk(表示块)、Phrase(表示短句)等结合使用。

    3), iTextSharp.text.Image

    说明:操作文档中的图片。
    该类主要用于新建一个图片。
    该类中提供了相关的属性和方法完成对图片的相关设置和操作。如属性AbsoluteX、AbsoluteY、Border等,方法GetType等。

    4), iTextSharp.text.pdf.PdfTable

    说明:操作PDF文档中的表格。
    该类用来生成或设置PDF文档中的表格。

    5), iTextSharp.text.pdf.PdfCell

    说明:操作PDF文档中表格的单元格。
    该类用来生成或设置PDF文档中表格的单元格。

    6), iTextSharp.text.pdf.PdfWriter

    说明:创建写PDF文档的实例。一般通过如下方法调用来创建其实例。
    参数可以是任何一种流,经常使用System.IO.FileStream将Document写入文件中。

    public static PdfWriter getInstance(Document document,Stream os)
    

    7), iTextSharp.text.pdf.PdfReader

    说明:创建读PDF文档的实例。
    该类提供了很多属性和方法,来完成对PDF文档各种信息的读取。


    三.使用示例

    using System;
    using System.IO;
    using System.Text;
    using iTextSharp.text;
    using iTextSharp.text.pdf;
    using Spire.Pdf;
    
    namespace CSharpPdf
    {
        class Programma
        {
            static void Main(string[] args)
            {
                string path = @"E:\MyTest.pdf";
                //创建PDF文件
                FileStream pdfFS = new FileStream(path, FileMode.Create);
                //获取实例
                Document doc = new Document();
                PdfWriter.GetInstance(doc, pdfFS);
    
                //添加作者,标题,主题
                doc.AddAuthor("Czhenya");
                doc.AddTitle("CSDN_Czhenya");
                doc.AddSubject("添加主题-Test");
                doc.AddKeywords("关键字-Test");
    
                //打开PDF,新建页,添加内容,关闭
                doc.Open();
                doc.NewPage();
                doc.Add(new Paragraph("CSDN_Czhenya"));
                doc.Add(new Paragraph("中文字符显示不出来,Czhenya111111,,,"));
                //注册供应商   --> 不写这行会报错(System.NotSupportedException:“No data is available for encoding 1252.)
                System.Text.Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
                //设置文字样式 --> C:\Windows\Fonts  --> 系统字体路径
                BaseFont bfHei = BaseFont.CreateFont(@"C:\Windows\Fonts\STXINGKA.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                Font font = new Font(bfHei, 50);
                doc.Add(new Paragraph("这是华文行楷字体!", font));
    
                doc.NewPage();
                doc.Add(new Paragraph("CSDN_Czhenya222,,,,,"));
                doc.Close();
    
                //读取PDF内容...
                ReadPdfContent(path);
                ReadPdf(path);
    
                Console.ReadKey();
            }
    
            /// <summary>
            /// 读取PDF所有页 (不能读取中文)
            /// </summary>
            /// <param name="filepath">文件地址</param>
            /// <returns></returns>
            private static string ReadPdfContent(string filepath)
            {
                try
                {
                    string pdffilename = filepath;
                    PdfReader pdfReader = new PdfReader(pdffilename);
                    int numberOfPages = pdfReader.NumberOfPages;
                    StringBuilder sb = new StringBuilder();
    
                    for (int i = 1; i <= numberOfPages; ++i)
                    {
                        byte[] bufferOfPageContent = pdfReader.GetPageContent(i);
                        sb.Append(Encoding.UTF8.GetString(bufferOfPageContent));
                    }
                    pdfReader.Close();
    
                    return sb.ToString();
                }
                catch (Exception ex)
                {
                    StreamWriter log = File.AppendText(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "\\log.log");
                    log.WriteLine("出错原因:" + ex.ToString());
                    log.Flush();
                    log.Close(); return null;
                }
            }
    
            /// <summary>
            /// 读取PDF所有页 (可读中文)
            /// </summary>
            /// <param name="filepath">文件地址</param>
            /// <returns></returns>
            private static void ReadPdf(string path)
            {
                //实例化PdfDocument类对象,并加载PDF文档
                Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument();
                doc.LoadFromFile(path);
    
                //实例化一个StringBuilder 对象
                StringBuilder content = new StringBuilder();
                //遍历文档所有PDF页面,提取文本
                foreach (PdfPageBase page in doc.Pages)
                {
                    content.Append(page.ExtractText());
                }
            }
    	 }
    }
    

    遇到的问题:

    报错:System.NotSupportedException:“No data is available for encoding 1252.

    添加代码解决报错:

    System.Text.Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    

    codepage查询:
    https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers

    222

    展开全文
  • Qt读写pdf文件

    2020-11-20 14:55:41
    主要利用QPrinter来实现,QPrinter不止可以操作打印机来打印纸张文件,并且可以将文件保存至磁盘,存储为pdf格式的文件。 1、使用图片生成pdf 代码如下: QPrinter printer_pixmap(QPrinter::HighResolution); ...

    一、生成pdf(来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101gvnx.html

    Qt中如何让图片、文本、HTML或者其他形式的内容生成pdf呢?主要利用QPrinter来实现,QPrinter不止可以操作打印机来打印纸张文件,并且可以将文件保存至磁盘,存储为pdf格式的文件。

    1、使用图片生成pdf

    代码如下:

    QPrinter printer_pixmap(QPrinter::HighResolution);
    printer_pixmap.setPageSize(QPrinter::A4);  //设置纸张大小为A4
    printer_pixmap.setOutputFormat(QPrinter::PdfFormat);  //设置输出格式为pdf
    printer_pixmap.setOutputFileName("E:\\test_pixmap.pdf");   //设置输出路径
    QPixmap pixmap = QPixmap::grabWidget(main_widget, main_widget->rect());  //获取界面的图片
    
    QPainter painter_pixmap;
    painter_pixmap.begin(&printer_pixmap);
    QRect rect = painter_pixmap.viewport();
    int multiple = rect.width()/pixmap.width();
    painter_pixmap.scale(multiple, multiple); //将图像(所有要画的东西)在pdf上放大multiple-1倍
    painter_pixmap.drawPixmap(0, 0, pixmap);  //画图
    painter_pixmap.end();
    

    效果如下:
    在这里插入图片描述

    2、使用文本生成pdf
    代码如下:

    QPrinter printer_text;
    printer_text.setOutputFormat(QPrinter::PdfFormat);
    printer_text.setOutputFileName("E:\\test_text.pdf");
    QPainter painter_text;
    painter_text.begin(&printer_text);
    
    QDateTime current_date_time = QDateTime::currentDateTime();
    QString current_date = current_date_time.toString("yyyy-MM-dd hh:mm:ss ddd");
    
    QPoint point(10, 10);
    for(int i=1; i<=5; i++)
    {
    QString message = QString("%1        %2        %3").arg(QString::number(i)).arg(current_date).arg(QStringLiteral("北京"));
    int y = point.y();
    point.setY(y+20);
    painter_text.drawText(point, message);
    message.clear();
    }
    //printer_text.newPage();  //生成新的一页,可继续插入
    painter_text.end();
    

    效果如下:
    在这里插入图片描述

    使用HTML生成pdf

    此处请查看原文:http://blog.sina.com.cn/s/blog_a6fb6cc90101gvnx.html

    二、读pdf文件

    qt的QPrinter库只能实现pdf的写入(没有具体看源代码),如果需要读取pdf,比如做一个pdf阅读器,可使用第三方的qt库-Poppler Qt5。

    Poppler Qt5官网链接:https://people.freedesktop.org/~aacid/docs/qt5/

    基本说明(个人简单翻译):

    Poppler Qt5库
    libpopler-Qt5,是一个适用于Qt5程序加载和展现PDF文件的第三方库,接口简单易用,且使用者完全不需要知道它内部实现方法。
    目前来说该库还未出过什么bug,结实可靠(库的作者自吹。。。)
    最后就是使用方法,可以去官网简单看一下。

    在这里插入图片描述
    Poppler Qt5的具体使用还是可以查看其它博文:
    1、https://blog.csdn.net/yinyuchen1/article/details/77979965?utm_source=blogxgwz8
    2、https://blog.csdn.net/milujun/article/details/22827431

    展开全文
  • 一步一步教你写pdf文件

    千次阅读 2012-12-05 23:37:45
    一步一步教你写PDF文件  PDF作为一种跨平台的文件格式,越来越受到用户的欢迎。现在除了adobe官方提供的pdflib有很多第三方的库可以实现PDF的文件创建、修改、格式转换。PDF文档采用的是二进制和文本混排的方式...

    一步一步教你写PDF文件


        PDF作为一种跨平台的文件格式,越来越受到用户的欢迎。现在除了adobe官方提供的pdflib有很多第三方的库可以实现PDF的文件创建、修改、格式转换。PDF文档采用的是二进制和文本混排的方式。近期项目需要,对pdf文件的结构做了一些研究。最终,领导决定采用第三方库,没能用得上。在此,跟大家分享一下,算是抛砖引玉。关于pdf文件的结构网上有很多介绍,在此不在赘述,请参看

           pdf文件可以包含文本、图片、视频、动画、3D数据等,本人就拿最简单的文本举例。那么我们就从“Hello, world!"开始吧。本例,截图如下:

         由于pdf文件的解析中需要依靠交叉引用表,交叉引用表记录的是每一个obj相对于文件始点的位置(以后称“地址”),我们可以写一个函数,求出当前文件的位置。

    long getObjLocation(FILE* pFile)
    {
         int fseekres = fseek(pFile,0,SEEK_CUR);
         return ftell(pFile);
    }

          随着ISO标准的变化,pdf的文件格式也有一些调整。文件开始的地方标明文件对应的版本格式。

     void writeHeader(FILE* pFile,vector<long>& pdfLocation)
    {
         fwrite("%PDF-1.7\n\n",1,strlen("%PDF-1.7\n\n"),pFile);

         pdfLocation.push_back(getObjLocation(pFile));

     }

       解析pdf文件时,首先会从入口点开始。

    void writeCatalog(FILE* pFile,vector<long>& pdfLocation)

         fwrite("1 0 obj  % entry point\n<<\n  /Type /Catalog\n  /Pages   3 0 R\n>>

                   \nendobj\n\n",

                1,

                strlen("1 0 obj  % entry point\n<<\n  /Type /Catalog\n  /Pages 3 0 R\n>>

                \nendobj\n\n"),

                pFile);
          pdfLocation.push_back(getObjLocation(pFile));
    }

           pdf可以有很多页,每一页的页面大小、内容可以各不相同,本例中只有一页

    void writePages(FILE* pFile,vector<long>& pdfLocation)
    {
       fwrite("3 0 obj\n<<\n  /Type /Pages\n  /MediaBox [ 0 0 200 200 ]\n 

                /Count 1\n  /Kids [ 4 0 R ]\n>>\nendobj\n\n",

               1,

               strlen("3 0 obj\n<<\n  /Type /Pages\n  /MediaBox [ 0 0 200 200 ]\n 

               /Count 1\n  /Kids [ 4 0 R ]\n>>\nendobj\n\n"),pFile);
              pdfLocation.push_back(currentLocation(pFile));
    }

            创建page。

    void writePage(FILE* pFile,vector<long>& pdfLocation)
    {
         fwrite("4 0 obj\n<<\n  /Type /Page\n  /Parent 3 0 R\n  /Resources <<\n/Font  <<

                   \n/F1 5 0 R \n>>\n  >>\n  /Contents 6 0 R\n>>\nendobj\n\n",

                   1,
                  strlen("4 0 obj\n<<\n  /Type /Page\n  /Parent 2 0 R\n  /Resources <<

                  \n/Font <<\n/F1 5 0 R \n>>\n  >>\n  /Contents 6 0 R\n>>\nendobj\n\n"),

                 pFile);
         pdfLocation.push_back(getObjLocation(pFile));
    }

         写入文本内容。

    void writeContents(FILE* pFile,vector<long>& pdfLocation)
    {
        char txtContent[512];
        sprintf_s(txtContent,512,"6 0 obj  %% page content\n<<\n  /Length % d\n>>

         \nstream\nBT\n70 50 TD\n/F1 12 Tf\n(Hello, world!)nET\nendstream\nendobj\n\n",

         strlen("\nBT\n70 50 TD\n/F1 12 Tf\n(Hello, world!) Tj\nET\n"));
        fwrite(txtContent,1,strlen(txtContent),pFile);
        pdfLocation.push_back(getObjLocation(pFile)); 
    }

         定义字体。 

    void writeFont(FILE* pFile,vector<long>& pdfLocation)
    {
        fwrite("5 0 obj\n<<\n  /Type /Font\n  /Subtype /Type1\n  /BaseFont

                   /Times- Roman\n>>\nendobj\n\n",

                   1,
                   strlen("5 0 obj\n<<\n  /Type /Font\n  /Subtype /Type1\n  /BaseFont

                   /Times-Roman\n>>\nendobj\n\n"),

                 pFile);
        pdfLocation.push_back(getObjLocation(pFile));
    }

           创建交叉引用表。习惯上从第0个obj开始,第0个不存在,标记为删除。根据情况交叉引用表可以不止一个。
    void writeXref(FILE* pFile,const vector<long> pdfLocation)
    {
         char* xrefIndexAndNum = new char[64];
         memset(xrefIndexAndNum,0x0,64);
         sprintf_s(xrefIndexAndNum,64,"xref\n0 %d\n",pdfLocation.size());
         fwrite(xrefIndexAndNum,1,strlen(xrefIndexAndNum),pFile);
        delete [] xrefIndexAndNum;
        xrefIndexAndNum = NULL;
        fwrite("0000000000 65535 f\n",1,strlen("0000000000 65535 f\n"),pFile);
        vector<long>::const_iterator iter = pdfLocation.begin(); 
        for(size_t i = 0;i < pdfLocation.size() -1;i++)
       {
         writeObjXref(pFile,pdfLocation[i]);  
       }
    }

    //单个obj的引用地址

    void writeObjXref(FILE* pFile,long objRef)
    {
         char *temp = new char[30];
        sprintf_s(temp,30,"%010d 00000 n \n",objRef); 
        fwrite(temp,1,strlen(temp),pFile); 
        delete [] temp;
        temp = NULL;

         文件尾的写法跟版本的关系不大,指明obj的的个数、入口点、交叉引用表的地址。

    void writeTraile(FILE* pFile,const vector<long> pdfLocation)
    {
       char* tempArrChar = new char[256];
        sprintf_s(tempArrChar,256,
       "trailer\n<</Size %d/Root 1 0 R>>\nstartxref\n%ld\n%%%%EOF\n",
        pdfLocation.size(),
        pdfLocation[pdfLocation.size() -1]);
        fwrite(tempArrChar,1,strlen(tempArrChar),pFile); 
        delete [] tempArrChar;
        tempArrChar = NULL;
    }

         最后调用以上函数,创建一个完整的pdf文件。大家可以用记事本打开生产的pdf文件,可以看到pdf文件的组织形式。

    void writePdf(const char *filename)
    {
       FILE* pdfFile = NULL;
       fopen_s(&pdfFile,filename,"wb");
       vector<long> pdfLocation;//存储obj的引用地址和交叉引用表的地址
       writeHeader(pdfFile,pdfLocation);  
       writeCatalog(pdfFile,pdfLocation);
       writePages(pdfFile,pdfLocation); 
       writePage(pdfFile,pdfLocation); 
       writeFont(pdfFile,pdfLocation);
       writeContents(pdfFile,pdfLocation);  
       writeXref(pdfFile,pdfLocation);

        writeTraile(pdfFile,pdfLocation); 
        fclose(pdfFile);
       pdfFile = NULL;
    }

          目前市面上已经有很多成熟的第三方库,基本能满足大家的需求。鄙人在此抛砖引玉,只是出于帮助大家一起理解pdf文件结构的目的,不鼓励重复造轮子。匆忙写就,如有不当之处,欢迎拍砖。

     

    ps:本文采用C++/CLI 托管代码,简单修改可用于C#。为了排版需要,代码中插入了很多空格,请不要简单拷贝运行。

     

    展开全文
  • java 用itextpdf读写pdf文件

    千次阅读 2017-08-07 09:54:08
    import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.parser.PdfTextExtractor; import java.io.IOException; public class PdfReadExample { private static final String FILE_NAME =
    import com.itextpdf.text.pdf.PdfReader;
    import com.itextpdf.text.pdf.parser.PdfTextExtractor;
    
    import java.io.IOException;
    
    public class PdfReadExample {
    	private static final String FILE_NAME = "D:\\test\\11.pdf";
    
        public static void main(String[] args) {
    
            PdfReader reader;
    
            try {
    
                reader = new PdfReader(FILE_NAME);
    
                // pageNumber = 1
                String textFromPage = PdfTextExtractor.getTextFromPage(reader, 1);
    
                System.out.println(textFromPage);
    
                reader.close();
    
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
    }
    import com.itextpdf.text.*;
    import com.itextpdf.text.pdf.PdfWriter;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class PdfWriteExample {
    
        private static final String FILE_NAME = "D:\\test\\11.pdf";
    
        public static void main(String[] args) throws IOException {
            writeUsingIText();
        }
    
        private static void writeUsingIText() throws IOException {
    
            Document document = new Document();
    
            try {
    
                PdfWriter.getInstance(document, new FileOutputStream(new File(FILE_NAME)));
    
                //open
                document.open();
    
                Paragraph p = new Paragraph();
                p.add("This is my paragraph 1");
                p.setAlignment(Element.ALIGN_CENTER);
    
                document.add(p);
    
                Paragraph p2 = new Paragraph();
                p2.add("This is my paragraph 2"); //no alignment
    
                document.add(p2);
    
                Font f = new Font();
                f.setStyle(Font.BOLD);
                f.setSize(8);
    
                document.add(new Paragraph("This is my paragraph 3", f));
    
                //close
                document.close();
    
                System.out.println("Done");
    
            } catch (FileNotFoundException e ) {
                e.printStackTrace();
            } catch ( DocumentException e) {
                e.printStackTrace();
            }
    
        }
    }

    展开全文
  • C#写PDF文件类库PDF File Writer介绍

    千次阅读 2016-06-22 08:25:36
    .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍 阅读目录 1.PDF File Writer基本介绍2.一个简单的使用案例3.资源  1年前,我在文章:这些.NET开源项目你知道吗?.NET平台...
  • Debenu Quick PDF Library是一个PDF控件库,可以创建,渲染,打印,加强安全,合并,分割和操作PDF文件。本文总结了在MFC项目中使用Debenu Quick PDF Library Lite的常用方法,编程环境为VS2008 SP1。
  • python 读写txt,pdf文件

    2018-10-25 09:52:13
    python 读写txt文件 f = open('/home/usr/demo.txt','r') #读,不加'r'也可以 f = open('/home/usr/demo.txt','w') #,'w'是必需的 f.close() #不论是读还是...python 读写pdf文件 参考https://blog.csdn.ne...
  • 读写csv文件-PDF文件-docx文件

    万次阅读 2018-06-30 13:18:26
    ### csv文件 ​ with open('./file/MontyPythonAlbums.csv', 'r') as f: with open('test.csv', 'w') as t: ​ csvReader = csv.reader(f) # 读取文件 for row in csvReader: ...
  • Java 读写docx文件后直接转成PDF文件方法

    千次阅读 热门讨论 2018-07-09 09:51:37
    需要读写docx文件需要用到poi包,等下会提供下载地址,在读写docx文件之前,需要对docx文件进行操作,打开docx文件后,再需要编辑的地方加上“:${key}”,再在java文件中通过map来对这个值进行编辑,比如map.put(key...
  • java中用itext写PDF文件并输出下载

    千次阅读 2010-09-12 14:53:00
    在Playframework中,通过浏览器弹出窗口的方式下载PDF文件PDF文件是用iText生成的,支持中文。   获取中文自己的一段配置文件的代码: private static final String pdfFont = Play....
  • android 读取PDF文件

    热门讨论 2015-12-09 19:27:31
    android 读取PDF文件.zip
  • 给程序员PDF文件格式入门

    千次阅读 2013-09-07 22:36:49
    文章翻译自此处的部分 http://www.mactech.com/articles/mactech/Vol.15/15.09/PDFIntro/index.html 翻译的第三天了,每天用一小时。  PDF文件结构 一个规范的PDF文件可以分为四个主要部分(见图2):一个占一
  • vue项目中使用pdf.js预览pdf文件

    万次阅读 多人点赞 2018-05-02 20:44:06
    项目要求需要预览pdf文件,网上找了很久,大多数都是推荐pdf.js,自己先了解了一下,最后决定用pdf.js, 但是发现,在vue中使用这个很少!!!!!所以我就这一篇帮助一下vue使用pdfjs的朋友! 其实 这和前端...
  • Java实现PDF生成并且打印pdf文件(附demo) 目录: 0. 效果预览 1. 准备环境 2. Java如何调用打印机进行打印 3. Java如何生成pdf打印文件 4. 实现pdf内数据动态填充(可按需求改变数据,有一个模板就行) ...
  • pdf文件流生成pdf文件

    千次阅读 2016-07-28 14:26:00
    protected void Page_Load( ...导出的PDF文件可以用Adrode reader和福熙阅读器查看,如果出现乱码问题,请下载最新版本的reader软件。 转载于:https://www.cnblogs.com/ly77461/p/5714657.html
  • 问题 就是 利用pdf2swf.exe 把pdf转换成swf的时候 命令应该这么写pdf2swf.exe -T flashversion=9 -t D:/原文件名字.pdf -o D:/输出文件.swf 这样就不会出现这种问题了
  • android 中打开pdf文件也是一种很常见的场景,但是上网找了好多资料,有用webview加载的,但是要用vpn才能搞,最后发现一个库挺不错的,再次分享给大家  android-pdfview。下面主要说一下该库的使用方法。  ...
  • 我们在日常办公时,会经常对PDF文件进行签名操作,那么如何更快更高效的添加手写签名呢? 方法一: 在WPS2019中打开一个需要签名的PDF文件,在窗口上方菜单栏【插入】中选择【PDF签名】,届时我们可以通过三种方式...
  • Vue - element-ui 中预览 word 、exce、ppt以及pdf文件

    万次阅读 多人点赞 2019-08-17 16:21:01
    最近了个有 预览word 、Exce、ppt以及pdf文件 的后台 管理 在网上也找了 很多 就感觉很复杂 ,当然最后还是实现了 , 本博主一项喜欢简单 越简单越好 越好理解 废话不多说 先上效果图 (我就喜欢那种有图的代码 能...
  • springboot导出pdf文件

    2020-05-20 12:03:29
    springboot导出pdf文件下载java组件代码导出结果截图 ...-- 写PDF文件 --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version
  • 直接用iText创建pdf文件考虑到html中的表格等等要合并或者什么的太麻烦,就直接通过Html模板替换之后再转换PDF来的更简单。具体实现直接分享代码给大家,高手勿喷!哈哈! 1.html文件 body { font-family: ...
  • Python/PDF文件读写demo (mark)

    千次阅读 2018-12-12 14:36:29
    # pdf_demo.py # coding: utf-8 # de8ug # 需要提前安装:pip install reportlab from reportlab.lib.pagesizes import A4 from reportlab.pdfgen import canvas from reportlab.pdfbase.ttfonts import TTFont ...
  • python修改pdf文件

    千次阅读 2019-01-05 22:36:03
    最近有个编辑修改pdf文件的需求:去掉每页等页眉、页脚(里面包含图片),修改后的文件还得保存为pdf。 初步方案 使用python的库:PyPDF2。发现只有功能:简单的读写、拆分、合并等功能。不能去掉文件的部分内容。 ...
  • VC操作PDF文件

    千次阅读 2019-03-05 00:11:36
    一、使用PDFLib操作PDF文件 PDFLib是用于创建PDF文档的开发库,提供了简单易用的API,隐藏了创建PDF的复杂细节且不需要第3方软件的支持。PDFLib库对于个人是免费的,对于商业产品需要购买许可。...
  • Android 加载pdf文件

    千次阅读 2019-08-27 10:53:08
    今天来总结一下加载pdf文件。 加载pdf有好多办法, 一:使用webview来加载。 mWebView.loadUrl("http://docs.google.com/gviewembedded=true&url=" + pdfUrl); 后面直接加上你的pdf地址就ok了,不过这个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 144,207
精华内容 57,682
关键字:

怎样写pdf文件