精华内容
下载资源
问答
  • C# 实现Excel转WordWord转PDF、合并PDF

    千次阅读 2015-05-21 15:47:35
    C# 实现Excel转WordWord转PDF、合并PDF

    1.Excel转Word实现如下

    (1)第一种直接Excel表格转Word文档,当时试过了就相当于手动的复制粘贴,可以试试,如果不满足需求,可以试试第二种方法:

     public void ExcelToWord(string excPath, string wordPath)
            {
                FileStream fs1 = new FileStream(excPath, FileMode.Open);

                StreamReader m_streamReader = new StreamReader(fs1);

                m_streamReader.BaseStream.Seek(0, SeekOrigin.Begin);

                string strLine ="aa"; //m_streamReader.ReadLine();

                FileStream fs2 = new FileStream(wordPath, FileMode.Create, FileAccess.Write);
                StreamWriter sw = new StreamWriter(fs2, System.Text.Encoding.GetEncoding("GB2312"));
                sw.WriteLine(strLine);
            }

    (2)这种方法是通过Word模板来创建Word文件,然后填充书签内容。(小编用的就是这种方法)

     /// <summary>
            /// 根据模板 创建案卷目录、卷内目录word版
            /// </summary>
            /// <param name="srcDgv">datatable</param>
            /// <param name="FileName">word保存文件地址</param>
            /// <param name="ArchivesNo"></param>
            /// <param name="wordPath">模板路径</param>
            /// <param name="typeName"></param>
            public void DatatableToWord(System.Data.DataTable srcDgv, string FileName, string ArchivesNo, string wordPath,string typeName)
            {
                string  path = FileName + ".doc";
                int rowStart =1;//添加数据起始行
                Report report = new Report();
                if (typeName == "卷内目录")
                {
                    rowStart = 4;
                    report.CreateNewDocument(wordPath + "JNML.doc");
                    //向标签中插入值
                    report.InsertValue("ArchivesNo", ArchivesNo);
                }
                else if (typeName == "案卷目录")
                {
                    rowStart = 3;
                    report.CreateNewDocument(wordPath + "AJML.doc");
                }
                if (srcDgv.Rows.Count > 15)
                {
                    for (int i = 0; i < (srcDgv.Rows.Count-15) / 15 + 1; i++)
                    {
                        report.AddRow( 1, 15);
                    }
                }
                for (int i = 0; i < srcDgv.Rows.Count; i++)
                {
                    string rowNum=(i+1).ToString();
                    string[] cells = new string[srcDgv.Columns.Count];
                    cells[0] = rowNum;
                    for (int j = 1; j < srcDgv.Columns.Count; j++)
                    {
                        cells[j] = srcDgv.Rows[i][j].ToString();
                    }
                    report.InsertCell(1, i + rowStart, srcDgv.Columns.Count, cells);
                }
                report.SaveDocument(path);
            }

     

    2.Word转PDF

    /// <summary>
            /// word转换方法
            /// </summary>
            /// <param name="sourcePath">源文件路径</param>
            /// <param name="targetPath">目标文件路径</param>
            /// <returns></returns>
            public bool WORD_ConvertTo_PDF(string sourcePath, string targetPath)
            {
                bool result = false;
                try
                {
                    Aspose.Words.Document doc = new Aspose.Words.Document(sourcePath);
                    doc.Save(targetPath, SaveFormat.Pdf);
                    result = true;
                }
                catch (Exception ex)
                {
                    result = false;
                }
                finally
                {
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                }
                return result;
            }

    Word创建类:

    class Report
        {
           private _Application wordApp = null;    
           private _Document wordDoc = null;    
           public _Application Application    
           {      
                get      {         return wordApp;       }      
                set      {         wordApp = value;       }    
            }    
            public _Document Document     {      
                get      {         return wordDoc;       }     
                set      {         wordDoc = value;       }    
            }
            //通过模板创建新文档    
            public void CreateNewDocument(string filepath)
            {
                killWinWordProcess();
                wordApp = new ApplicationClass();
                wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
                wordApp.Visible = false;
                object missing =System.Reflection.Missing.Value;
                object templatename = filepath;
                wordDoc = wordApp.Documents.Open(ref templatename, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
            }
            //保存新文件    
            public void SaveDocument(string filePath)
            {
                object fileName = filePath;
                object format = WdSaveFormat.wdFormatDocument;
                //保存格式      
                object miss =System.Reflection.Missing.Value;      
                wordDoc.SaveAs(ref fileName, ref format, ref miss,ref miss, ref miss,ref miss, ref miss, ref miss, ref miss,ref miss, ref miss,ref miss, ref miss,ref miss, ref miss,ref miss);      
                //关闭wordDoc,wordApp对象      
                object SaveChanges =WdSaveOptions.wdSaveChanges;      
                object OriginalFormat =WdOriginalFormat.wdOriginalDocumentFormat;      
                object RouteDocument =false;      
                wordDoc.Close(ref SaveChanges, ref OriginalFormat, ref RouteDocument);      
                wordApp.Quit(ref SaveChanges, ref OriginalFormat, ref RouteDocument);    
            }
            //在书签处插入值    
            public bool InsertValue(string bookmark, string value)    
            {      
                object bkObj =bookmark;      
                if(wordApp.ActiveDocument.Bookmarks.Exists(bookmark))      
                {        
                    wordApp.ActiveDocument.Bookmarks.get_Item(ref bkObj).Select();        
                    wordApp.Selection.TypeText(value);        
                    return true;      
                }      
                return false;    
            }
            //插入表格,bookmark书签    
            public Table InsertTable(string bookmark, int rows, int columns,float width)    
            {      
                object miss =System.Reflection.Missing.Value;      
                object oStart =bookmark;      
                Range range =wordDoc.Bookmarks.get_Item(ref oStart).Range;
                //表格插入位置      
                Table newTable =wordDoc.Tables.Add(range,rows, columns, ref miss, ref miss);      
                //设置表的格式      
                newTable.Borders.Enable =1;
                //允许有边框,默认没有边框(为0时报错,1为实线边框,2、3为虚线边框,以后的数字没试过)      
                newTable.Borders.OutsideLineWidth=WdLineWidth.wdLineWidth050pt;//边框宽度      
                if(width != 0)      
                {        
                    newTable.PreferredWidth=width;//表格宽度      
                }      
                newTable.AllowPageBreaks =false;      
                return newTable;    
            }       
            //合并单元格 表名,开始行号,开始列号,结束行号,结束列号    
            public void MergeCell(Microsoft.Office.Interop.Word.Table table, int row1, int column1,int row2, int column2)    
            {      
                table.Cell(row1,column1).Merge(table.Cell(row2,column2));    
            }
            //设置表格内容对齐方式Align水平方向,Vertical垂直方向(左对齐,居中对齐,右对齐分别对应Align和Vertical的值为-1,0,1)    
            public void SetParagraph_Table(Microsoft.Office.Interop.Word.Table table, int Align, int Vertical)    
            {      
                switch(Align)      
                {        
                    case -1:
                        table.Range.ParagraphFormat.Alignment=WdParagraphAlignment.wdAlignParagraphLeft;
                        break;
                    //左对齐        
                    case 0:
                        table.Range.ParagraphFormat.Alignment=WdParagraphAlignment.wdAlignParagraphCenter;
                        break;//水平居中        
                    case 1:
                        table.Range.ParagraphFormat.Alignment=WdParagraphAlignment.wdAlignParagraphRight;
                        break;//右对齐     
                }      
                switch(Vertical)      
                {        
                    case -1:
                        table.Range.Cells.VerticalAlignment=WdCellVerticalAlignment.wdCellAlignVerticalTop;
                        break;//顶端对齐        
                    case 0:
                        table.Range.Cells.VerticalAlignment=WdCellVerticalAlignment.wdCellAlignVerticalCenter;
                        break;//垂直居中        
                    case 1:
                        table.Range.Cells.VerticalAlignment=WdCellVerticalAlignment.wdCellAlignVerticalBottom;
                        break;//底端对齐     
                }    
            }
             //设置表格字体    
            public void SetFont_Table(Microsoft.Office.Interop.Word.Table table, string fontName, double size)    
            {      
                if(size != 0)      
                {        
                    table.Range.Font.Size =Convert.ToSingle(size);      
                }      
                if(fontName !="")      
                {        
                    table.Range.Font.Name =fontName;      
                }    
            }       
            //是否使用边框,n表格的序号,use是或否    
            public void UseBorder(int n,bool use)    
            {      
                if(use)      
                {        
                    wordDoc.Content.Tables[n].Borders.Enable =1; //允许有边框,默认没有边框(为0时无边框,1为实线边框,2、3为虚线边框,以后的数字没试过)      
                }       else     
                {        
                    wordDoc.Content.Tables[n].Borders.Enable =2; //允许有边框,默认没有边框(为0时无边框,1为实线边框,2、3为虚线边框,以后的数字没试过)      
                }    
            }
            //给表格插入一行,n表格的序号从1开始记    
            public void AddRow(int n)    
            {      
                object miss =System.Reflection.Missing.Value;      
                wordDoc.Content.Tables[n].Rows.Add(ref miss);    
            }       
            //给表格添加一行    
            public void AddRow(Microsoft.Office.Interop.Word.Table table)    
            {      
                object miss =System.Reflection.Missing.Value;      
                table.Rows.Add(ref miss);    
            }       
            //给表格插入rows行,n为表格的序号    
            public void AddRow(int n, int rows)    
            {      
                object miss =System.Reflection.Missing.Value;      
                Microsoft.Office.Interop.Word.Table table = wordDoc.Content.Tables[n];      
                for(int i = 0; i < rows; i++)      
                {        
                    table.Rows.Add(ref miss);      
                }    
            }
            //给表格中单元格插入元素,table所在表格,row行号,column列号,value插入的元素    
            public void InsertCell(Microsoft.Office.Interop.Word.Table table, int row, int column,string value)    
            {      
                table.Cell(row,column).Range.Text =value;    
            }       
            //给表格中单元格插入元素,n表格的序号从1开始记,row行号,column列号,value插入的元素    
            public void InsertCell(int n, int row,int column, string value)    
            {      
                wordDoc.Content.Tables[n].Cell(row,column).Range.Text =value;   
            }       
            //给表格插入一行数据,n为表格的序号,row行号,columns列数,values插入的值    
            public void InsertCell(int n, int row,int columns, string[] values)    
            {     
                Microsoft.Office.Interop.Word.Table table = wordDoc.Content.Tables[n];      
                for(int i = 0; i < columns; i++)      
                {        
                    table.Cell(row,i + 1).Range.Text =values[i];      
                }   
            }       
            //插入图片    
            public void InsertPicture(string bookmark, string picturePath, float width, float hight)    
            {      
                object miss = System.Reflection.Missing.Value;      
                object oStart =bookmark;      
                Object linkToFile =false;   
                //图片是否为外部链接      
                Object saveWithDocument =true;
                //图片是否随文档一起保存      
                object range =wordDoc.Bookmarks.get_Item(ref oStart).Range;
                //图片插入位置      
                wordDoc.InlineShapes.AddPicture(picturePath,ref linkToFile, ref saveWithDocument, ref range);      
                wordDoc.Application.ActiveDocument.InlineShapes[1].Width=width; //设置图片宽度      
                wordDoc.Application.ActiveDocument.InlineShapes[1].Height=hight; //设置图片高度    
            }
            //插入一段文字,text为文字内容    
            public void InsertText(string bookmark, string text)    
            {      
                object oStart =bookmark;      
                object range =wordDoc.Bookmarks.get_Item(ref oStart).Range;      
                Paragraph wp =wordDoc.Content.Paragraphs.Add(ref range);      
                wp.Format.SpaceBefore= 6;      
                wp.Range.Text =text;      
                wp.Format.SpaceAfter =24;      
                wp.Range.InsertParagraphAfter();      
                wordDoc.Paragraphs.Last.Range.Text ="\n";    
            }
              //杀掉winword.exe进程    
            public void killWinWordProcess()    
            {      
                System.Diagnostics.Process[]processes=System.Diagnostics.Process.GetProcessesByName("WINWORD");      
                foreach (System.Diagnostics.Process process in processes)      
                {        
                    bool b = process.MainWindowTitle=="";        
                    if (process.MainWindowTitle =="")        
                    {         
                        process.Kill();       
                    }     
                }    
            }
        }

    3.合并PDF(Word文件或者PDF文件都可合并为一个PDF文件,第一次写,望多多支持)

    private void MergePDF(string PdfFileNames, string outMergeFile,string FileName)
            {
                string subPath = outMergeFile+"\\temp\\";
                string[] fileList = PdfFileNames.Split(',');
                if (fileList.Length < 1) {
                    return;
                }

                try
                {
                    PdfReader reader;

                    iTextSharp.text.Document document = new iTextSharp.text.Document();

                    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outMergeFile + "\\" + FileName, FileMode.Create));

                    document.Open();

                    PdfContentByte cb = writer.DirectContent;

                    PdfImportedPage newPage;

                    BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);

                    int countNum = 0;
                    for (int i = 0; i < fileList.Length; i++)
                    {
                        if (fileList[i].Contains(".docx"))
                        {
                            fileList[i] = fileList[i].Replace(".docx", ".pdf");
                        }
                        else if (fileList[i].Contains(".doc"))
                        {
                            fileList[i] = fileList[i].Replace(".doc", ".pdf");
                        }
                        if (!File.Exists(subPath + fileList[i]))
                        {
                            continue;
                        }
                        reader = new PdfReader(subPath + fileList[i]);

                        int iPageNum = reader.NumberOfPages;

                        for (int j = 1; j <= iPageNum; j++)
                        {
                            countNum += 1;
                            document.NewPage();
                            newPage = writer.GetImportedPage(reader, j);

                            String text = countNum.ToString();
                            float len = bf.GetWidthPoint(text, 10);
                            cb.AddTemplate(newPage, 0, 0);
                            cb.BeginText();
                            cb.SetFontAndSize(bf, 10);
                            cb.ShowTextAligned(PdfContentByte.ALIGN_RIGHT, text, 530, 20, 0);

                            //cb.SetTextMatrix(0, 0);
                            //cb.ShowText(text);
                            cb.EndText();
                           

                            //cb.AddTemplate(newPage, 0, 0);
                        }
                    }
                    if (document != null)
                    {
                        document.Close();
                    }
                    if (Directory.Exists(subPath))
                        Directory.Delete(subPath, true);//删除临时文件夹
                }
                catch (Exception)
                {
                    string message ="文件:" +outMergeFile + "\\" + FileName+"合并失败。";
                    WriteException(message);
                }
            }

     

    展开全文
  • ftl转word,word转pdf记录

    千次阅读 2019-08-29 19:58:48
    最近项目需要用到转word转pdf,这里做一下记录。 使用freemarker工具将ftl文件转word 首先,编辑好word文档内容格式,导出xml文件,然后将文件后缀名更改诶ftl 然后引入依赖 <dependency> <...

    最近项目需要用到转word和转pdf,这里做一下记录。

     

    使用freemarker工具将ftl文件转word

    首先,编辑好word文档内容格式,导出为xml文件,然后将文件后缀名更改诶ftl

    然后引入依赖

    <dependency>
    	    <groupId>org.freemarker</groupId>
    	    <artifactId>freemarker</artifactId>
    	    <version>2.3.21</version>
    	</dependency>

    最后使用代码测试

    package com.test.docpdf;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.net.URLEncoder;
    import java.util.HashMap;
    import java.util.Map;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.core.env.SystemEnvironmentPropertySource;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    
    public class FtlToWord {
    	
    
        private static Configuration configuration = null;  
        
        private static final String templateFolder = FtlToWord.class.getClassLoader().getResource("").getPath()+"/templates/";  //FTL文件所存在的位置 
        static { 
            configuration = new Configuration();  
            configuration.setDefaultEncoding("utf-8");  
            try {  
                configuration.setDirectoryForTemplateLoading(new File(templateFolder));  
            } catch (IOException e) {
                e.printStackTrace();
            }  
       }  
    
        /*private WordUtils() {  
            throw new AssertionError();  
        } */ 
        
        public static void main(String[] args) throws IOException {
    		Map<String, Object> map = new HashMap<String, Object>();
    		FtlToWord w = new FtlToWord();
    		w.exportMillCertificateWord(map);
    	}
    
        public static void exportMillCertificateWord(Map map) throws IOException {  
            configuration.setDefaultEncoding("UTF-8");
            //Template freemarkerTemplate = configuration.getTemplate("test.ftl");  
            Template freemarkerTemplate = configuration.getTemplate("testtwordfff.ftl");  
            File file = null;  
            InputStream fin = null;  
            // 调用工具类的createDoc方法生成Word文档  
            file = createDoc(map,freemarkerTemplate);  
            fin = new FileInputStream(file);  
               
        }  
    
        private static File createDoc(Map<?, ?> dataMap, Template template) {  
        	
            String name =  "C:\\Users\\666\\Desktop\\testtwordfff.doc";  
            File f = new File(name);  
            Template t = template;  
            try {  
            	f.createNewFile();
                Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");  
                t.process(dataMap, w);
                w.close();  
            } catch (Exception ex) {  
                ex.printStackTrace();  
                throw new RuntimeException(ex);  
            }  
            return f;  
        }
    
    }
    

    可以再代码中配置好ftl文件和pdf文件的路径,然后使用main方法 测试

     

    将word文件转pdf

    将word文件转pdf首先尝试使用的是OpenOffice。

    首先下载OpenOffice的软件,然后再cmd中进入中,调用启动服务的命令:

    soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

    然后下载jodconverter的jar包,在代码中编写测试程序。

    测试发现在使用手动生成的word转pdf成功,但是使用ftl生成的word转pdf内容错误(内容为xml的标签信息)

     

    然后再尝试的是使用jacob将word转pdf,它是直接调用Microsoft Office 或 WPS组件实现word、excel、PPT转换成PDF。

    只支持windows服务器

    首先引入依赖

    <dependency>
       	    <groupId>net.sf.jacob-project</groupId>
       	    <artifactId>jacob</artifactId>
       	    <version>1.14.3</version>
       	</dependency>

    然后下载 jacob-1.14.3-dll.zip 文件 将dll文件放到jdk的bin目录中

    最后使用代码测试调用

    package com.test.docpdf;
    import com.jacob.activeX.ActiveXComponent;
    import com.jacob.com.Dispatch;
    import com.jacob.com.Variant;
    
    
    public class WordToPdf {
      private static final int WDFO_RMATPDF = 17;
      private static final int XLTYPE_PDF = 0;
      private static final int PPT_SAVEAS_PDF = 32;
      public static final int WORD_HTML = 8;
      public static final int WORD_TXT = 7;
      public static final int EXCEL_HTML = 44;
    
      /*private OfficeConverterUtils() {
          throw new AssertionError();
      }*/
    
      
      public static boolean officeToPdf(String officePath, String postfix, String pdfPath) {
    	  return wordToPdf(officePath, pdfPath);
      }
      
      public static void main(String[] args) {
    	String wordPath = "C:\\Users\\61673\\Desktop\\testtwordfff.doc";
    	String pdfPath = "C:\\Users\\61673\\Desktop\\testtwordfff.pdf";
    	WordToPdf o = new WordToPdf();
    	o.wordToPdf(wordPath, pdfPath);
    }
    
      /**
       * word转换成PDF
       * @param wordPath 文件路径
       * @param pdfPath  文件路径
       * @return 成功失败
       */
      public static boolean wordToPdf(String wordPath, String pdfPath) {
          ActiveXComponent msWordApp = new ActiveXComponent("Word.Application");
          msWordApp.setProperty("Visible", new Variant(false));
          Dispatch docs = Dispatch.get(msWordApp, "Documents").toDispatch();
          Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[]{wordPath, new Variant(false), new Variant(true)}, new int[1]).toDispatch();
    
          Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[]{pdfPath, new Variant(WDFO_RMATPDF)}, new int[1]);
          if (null != doc) {
              Dispatch.call(doc, "Close", false);
          }
          return true;
      }
    
     
    }
    

    初次调用报错,由于本机当时只安装了office,所以猜测缺失了某些组件,下载了wps安装后重新测试发现,再次测试成功。

    openOffice资料  jadcob资料

    展开全文
  • 关于Adobe Acrobat Professional 8.0 PDFMaker文件遗失的问题,现在来看一下相关解决方法,本文由烈火学院小编收集于网络,感谢原作者的辛苦劳动!  相信大家在安装完Office2007和Adobe Acrobat Professional ...
    
    

      关于Adobe Acrobat Professional 8.0 PDFMaker文件遗失的问题,现在来看一下相关解决方法,本文由烈火学院小编收集于网络,感谢原作者的辛苦劳动!

      相信大家在安装完Office2007和Adobe Acrobat Professional 8.0后,制作pdf文件时出现过“PDFMaker文件遗失”,最初发现是文件格式问题,Acrobat Professional 8.0只支持docx(微软新的文档格式),然而doc却不支持,现在Adobe出了Adobe Acrobat Professional 8.0的升级包8.1,已经很好解决了这个问题,大家可以去试试!^_^

      升级包下载地址

      http://ardownload.adobe.com/pub/adobe/acrobat/win/8.x/8.1/misc/AcrobatUpd810_cck_incr.msp

      直接打开Adobe Acrobat 7.0 Professional创建DOC文件到PDF时,出现“PDFMaker 文件遗失 要在修复模式下运行安装程序吗”,点击“是”,问题也没有解决。但直接在DOC文件打印到PDF时没有问题。出现此错误的解决方法如下:

      1、首先关闭Word。

      2、打开目录C:\Documents and Settings\Loginuser\Application Data\Microsoft\Templates(Loginuser是当前电脑开机登录用户名;如果不能显示Application Data目录,则到“我的电脑”,选择工具->文件夹选项->查看->显示所有文件和文件夹即可)。

      3、备份后删除目录内.dot文件(备份是为了以防万一,其实不备份也行)。

      4、打开Word,进入帮助->关于Microsoft Office Word ->禁用项目。

      5、在弹出窗口中,选择启用项后,单机启动,然后关闭。

      6、关闭Word再重新启动,问题就解决了。

      找回Word中丢失的PDFMaker工具栏

      环境:office xp 2003 + acrobat professional 7.0

      现象:在制作pfd时出现“PDFMaker文件遗失,要在修复模式下运行安装程序吗?”的提示。

      无益的举动:提示中选是或否都是没有帮助的。盲目重新安装office2003和acrobat7都是没用的。

      正确的方法:

      一、打开目录:C:\Documents and Settings\administrator\Application Data\Microsoft\Templates(其中,administrator是当前登录系统的用户名,application data这个目录默认是隐藏文件夹,所以之前要保证有权限查看隐藏文件夹,即工具-文件夹选项-查看,保证"查看所有文件和文件夹"这一项处于选取状态)

      二、删除这个文件夹下面的*.dot以及*.dotm文件(如果怕出现问题,可以先将这些文件备份出来再删。office2007以前的版本是*.dot,2007是*.dotm)

      三、打开ms word, 如果是office 2007以前的版本,采取以下操作帮助->关于Microsoft Office Word ->禁用项目,看看有没有关于pdf的项目,有则启用它,然后关闭word,重启即可。

      关于office 2007的解决方法,采取以下操作:

      左上角的office菜单图标-右下角的word选项按钮-加载项,查看禁用项目中是否有acrobat 的那个addin,有就启用它,重启word即可。

      到此如果还不能解决问题,那么你就在第三步删除*.dot和*。dotm文件之前先打开ms word,把关于pdf的加载项全部禁用掉,然后再执行第三第四个步骤。

      因工作需要,将一篇WORD文档转换成PDF文档,转换时提示“PDFMAKER文件遗失”,是否在修复模式下运行安装程序。

      由于很久未制做PDF文档,考虑可能是什么时候把其中的程序文件弄丢了,就按提示修复安装。

      安装完毕后重新制做,还是提示PDFMAKER文件遗失。没办法卸载了重装,还是如此。

      郁闷中随手将一个文本文档转换了一下,没想到成功!又换另一WORD文档,还是成功!再换我原来要转换的文档,还是不行!

      怪了!

      忽然想到PDFMAKER在转换WORD文档时,WORD主程序是要启动时,而刚才没成功的转换WORD主程序都没启动。原因可能就在这儿!

      原来前两天安装了WORD2007,刚才要转换的WORD文档是WORD97~2003格式,可能ADOBE PDFMAKER与WORD2007的程序衔接有点什么问题吧,制做PDF文件时需要启动WORD2007,而WORD2003格式的文件被 WORD2007启动后不是100%的兼容,就出现了上述提示。

      明白了怎么回事,解决办法就简单了,只需要把那个要转换的WORD文档(DOC格式)转换为WORD2007的DOCX格式,再转成PDF文件就行了。

      同样,如果你新装了其它程序,而PDFMAKER还如此提示的话,也同样需要将那个被转换的文件另存为最新的文档格式。

    展开全文
  • word转换pdf的技术方案,供参考。【doc/docx/ppt/pptx/xls/xlsx均支持转换】 本方案是Java结合shell命令完成,不同于以往的仅依赖java组件转换或打印pdf的方案,需要目标服务器安装office套件,可选方案有...
    word转换pdf的技术方案,供参考。【doc/docx/ppt/pptx/xls/xlsx均支持转换】
     
            本方案是Java结合shell命令完成,不同于以往的仅依赖java组件转换或打印pdf的方案,需要目标服务器安装office套件,可选方案有OpenOffice和LibreOffice[二者源是一家产品],安装完office套件后,使用office提供的脚本完成转换。安装LibreOffice时,为避免复杂的依赖关系,建议采用yum方式安装:yum install libreoffice
     
            脚本内容:soffice --headless --invisible --convert-to pdf 源office文档路径 --outdir 目录存储目录

     
    需要将以上脚本编写成sh脚本的形式,其中源路径需要配置成参数,由Java程序调用sh脚本时传入,转换结束后,到指定的目录可取到同名的pdf文档,再进行与业务相关的逻辑处理。注:临时目录需要定期清理,防止存储过多临时文档,导致磁盘占满。

    Java调用代码:

     

    Java代码  收藏代码
    1.   try {  
    2.             String shpath = "/tmp/topdf.sh";//脚本路径,脚本中需要将源doc路径配置成变量,由下行程序调用时入参  
    3. String cmd = "param";//xshell脚本入参  
    4.             Process ps = Runtime.getRuntime().exec(shpath,cmd);//  
    5.             ps.waitFor();//等待转换结果  
    6.   
    7.             BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));  
    8.             StringBuffer sb = new StringBuffer();  
    9.             String line;  
    10.             while ((line = br.readLine()) != null) {  
    11.                 sb.append(line).append("\n");  
    12.             }  
    13.             String result = sb.toString();  
    14.             System.out.println(result);  
    15.         } catch (Exception e) {  
    16.             e.printStackTrace();  
    17.         }  
     

     

    Shell脚本代码  收藏代码
    1. #!/bin/sh    
    2.     
    3. source=$1  
    4. echo ${source}   
    5. soffice --headless --invisible --convert-to pdf ${source} --outdir /tmp/  
     

     

    但发现运行一段时间命令不再响应,没有文档结果。经检查服务器,libreoffice运行良好,但soffice --convert-to 命令就是无响应无输出。查看活跃线程如下:

     


     

    有两个相关的活跃实例在运行。

     

    经翻阅资料,这是LO在2011年产生的一个bug,相关bug list 参考:

    https://bugs.documentfoundation.org/show_bug.cgi?id=37531 

     

    https://bugs.documentfoundation.org/show_bug.cgi?id=45026     


     

    大体意思是LO GUI实例一旦运行过一个,再运行一个实例的话,就会出现无响应的问题。解决思路有两个:

    1、杀掉所有的libreoffice实例,即将上面的两个实例杀掉

    2、执行命令时增加一行参数,经测试下面两条命令均可以执行【必须保证命令的执行要有权限】:

    soffice --headless --convert-to pdf ${source-file} --outdir ${target-path}  "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"

    soffice --headless --convert-to pdf ${source-file} --outdir ${target-path}  -env:UserInstallation=file:///home/user/.libreoffice-alt     

    欢迎加入我的星球

    程序员,除了编码,生活还应该有沉淀!

    展开全文
  • Word转换为Pdf,程序很多,但转换后的Pdf,还可以复制,虽可以加密禁止复制,但市场上太多的Pdf,还可以把Pdf转换Word等其他格式,很容易被别人利用和剽窃,如何彻底的自己的Word文档,可以被人浏览,查看,而被...
  • 最近公司业务需要在pdf中显示表格,但是表格内容列数有点长,导致word转pdf的时候显示全; 如上图这种显示全的情况(截图中没有放表格,表格同理一样)。 具体做法:第一、word的模板文件中需要进行设置word...
  • 批量转换word为pdf

    千次阅读 2019-05-22 21:47:53
    自己写的一个小工具,用于批量转换word为pdf,使用方式: 将完整代码拷贝到文档中,并修改名称words2pdfs.py 将该文件拷贝到需要转换的文档目录下 在终端中输入python words2pdfs.py 终端会列出来是否需要转换...
  • word转PDF公式缺失

    千次阅读 2016-02-03 20:11:59
    最近用word2013将一个word文档转变成PDF,发现上面的MathType编辑的公式和字符有部分缺失,如下: 然后百度,有说用smallPDF在线转换功能的,试了下,公式缺失的问题解决了,但是排版有些变动,竟然多出了几页。算...
  • Word2007转PDF

    千次阅读 2014-08-03 15:52:43
    百度上搜word转pdf
  • C#实现HTML转WORDWORD转PDF的方法

    千次阅读 2015-10-13 12:23:49
    C#实现HTML转WORDWORD转PDF的方法 这篇文章主要介绍了C#实现HTML转WORDWORD转PDF的方法,涉及C#实现HTML、WORDPDF等文件格式转换的相关技巧,需要的朋友可以参考下 本文实例讲述了C#实现HTML...
  • PDF转WORD以及WORD转PDF的方法

    千次阅读 2011-12-06 16:04:37
    PDF文件与WORD的DOC文件的制作方法不同,因此是无法直接转换Doc文件的,需要借助一款Solid Converter PDF的软件来实现PDF文档到DOC文档的转换。该软件支持中文,在安装后会自动转换中文界面。(下载地址:...
  • Java实现Word转PDF

    千次阅读 热门讨论 2019-03-13 20:27:44
    java实现word文档转pdf 最近在做一个Web项目,需要将Word转换成PDF然后展示出来。其中遇到许多问题,特此记录,如有不妥之处请指正。 实现功能 docx文档转换为PDF 转换之后排版混乱 使用工具(Jar包) aspose...
  • word转PDF不能显示中文字体问题

    千次阅读 2018-08-14 22:39:10
    maven依赖 &lt;dependency&gt; &lt;groupId&gt;fr.opensagres.xdocreport&lt;/groupId&...org.apache.poi.xwpf.converter.pdf&lt;/artifactId&gt; &l...
  • 1Java 将 Word 文档转换 PDF 的完美工具 在日常工作中,PDF格式良好的视觉阅读性和稳定性使其使用越来越广泛。因此我们常会遇到需要将成型的Word文档转换为PDF格式的情况。本文就将通过使用Java程序来演示如何将...
  • Python实现word转pdf

    千次阅读 2019-11-29 18:48:48
    Python实现word转pdf 在做word转pdf的功能过程中找了很多java的实现(POI),对于普通的文档还是支持的还可以,但是对于文档里面涉及图片、表格、水印等就会出现很多样式上的问题,字体重复,水印丢失,表格位置...
  • 四行Python代码实现将word文件转换为PDF
  • Python word转PDF

    千次阅读 2019-06-12 18:56:58
    from win32com.client import Dispatch from os import walk wdFormatPDF = 17 def doc2pdf(input_file): word = Dispatch('Word.Application') doc = word.Documents.Open(input_file) doc.SaveAs(i...
  • 1 Python 将word文件转换为PDF文件

    万次阅读 2017-01-18 17:48:11
    利用Python脚本将word转换为pdf
  • C#生成word文档 、word转pdf、合并pdf文件...由于前期在使用时对pdf涉及的太多,所以在文件导出时都是用的word转pdf形式。 备注:在当前文章中所涉及到的模板均.doc文件。 需求描述 用户根据表单填写基本信...
  • word2007 Pdf

    千次阅读 2017-04-08 15:12:10
    今天制作简历,需要将word 格式转为 pdf格式,使用的word 2007 ,在点击“另存”时,发现没有 pdf的导出项, 于是google 了一下点击第一项,然后,安装,最后发现不能下载,网站无效了 找到需要要在的软件名字 ...
  • Word PDF 技术方案评测

    万次阅读 2019-07-31 13:55:20
    文章目录背景最终选择评测标准一、运行...然后找了一些linux(CentOS)上使用的工具来进行转换,上线之后发现一些特殊类型的文档并不能很好的处理,然后就继续选择。 最终选择 先说结论,如果不对其他工具感兴趣,...
  • Word转出来的PDF为什么有空白页?

    千次阅读 2020-03-12 15:12:47
    Word转PDF为什么会出现空白页?相较Word文档,PDF格式更稳定,占用空间小,所以将Word转PDF是一种比较好的文档保存处理方式,而且操作也非常简单。但有时转换后的PDF出现一些空白页是什么原因呢? 原因一:Word...
  • [python]word转pdf、docdocx、word转html

    万次阅读 2018-03-07 10:58:44
    python Word文件转换为pdf文件(doc/docx文件转化为pdf文件)# -*- encoding: utf-8 -*- import os from win32com import client #pip instatll win32com def doc2pdf(doc_name, pdf_name): """ :...
  • 手机上怎么把Word转换为PDF

    千次阅读 2018-10-23 09:22:48
    大家经常会需要将Word文档转换为PDF的,电脑上也有很多的在线转换工具,当然如果你使用的是Word2017以上的版本也是可以直接另存为PDF格式的,但是要是电脑在身边、或者是下班时间呢?其实Word转换PDF也可以在手机...
  • PDF转WORD为什么这么难

    万次阅读 2017-08-01 11:12:18
    pdf转word是一个非常普遍的需求,而你会发现好用、转换质量好的工具还真是多,尤其百度搜索前面的推广结果,更是差...今天来分析一下为什么pdf转word那么难。 PDF格式特殊 PDF是adobe公司出品方便打印的文档
  • java代码实现word转换成pdf

    千次下载 热门讨论 2013-09-18 12:45:07
    va代码 word转pdfword批量转换成pdfword单独转换成pdf,只需要调用WordToPDFUtil方法就可以实现批量或者单独转换
  • Java Word Pdf

    千次阅读 2017-04-19 17:20:14
    Java Word Pdf 前言:  平常项目中遇到需要将word转换为pdf,我们一般利用的是jacob.jar组件,这个组件利用的是微软office组件,但有时项目需要部署到liunx下,liunx中没有office,我们可以利用apache ...
  • PDF转Word教程

    千次阅读 2013-11-16 19:47:03
    这里推荐一些PDF转换的方法,有pdf转wordpdf转txt,pdf转jpg,pdf转ppt,word转pdf等等相关的pdf转换器的方法
  • word2003如何转换为pdf

    千次阅读 2015-10-10 10:21:46
    Word2003转PDF像07或10那样直接另存为PDF便可,如果我们手头上有大批的Word2003文档需要转为PDF文档只能通过安装专业的软件来实现,好处是PDF转换工具转换出的PDF文件比令存的更清晰和准确,比起另存的方法...
  • PDF免费转word方法

    千次阅读 多人点赞 2020-10-27 17:21:23
    平时偶尔需要将PDF文档转换为word,现在将自己经常用的几个在线 PDF转word网站分享一下。 1、https://www.dy1.com/ 打开网站后,在网页左侧点击PDF转换器,然后就会出现一个PDF转换页面。这里可以将PDF转换...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 97,287
精华内容 38,914
关键字:

为什么word不能转pdf