PDF 파일로 사무실 시리즈 (1) --- Office 파일 (워드, PPT, 엑셀)

요구 사항 : 기사의 미리보기로하고, 웹 페이지, 주로 (워드, PPT, 엑셀) 파일의 3 종류의 Office 파일.

이 해결책을 찾기 위해 조금 연구

  • 직접 통화 기능은 마이크로 소프트의 온라인 미리보기를 달성하기 위해 (미리보기 전제 : 미리보기 리소스가 직접 공용 네트워크를 통해 액세스 할 수 있어야합니다) 마이크로 소프트 인터페이스 문서
https://view.officeapps.live.com/op/view.aspx?src=http%3a%2f%2fvideo.ch9.ms%2fbuild%2f2011%2fslides%2fTOOL-532T_Sutter.pptx

에서 src접합의 다시 파일 주소를 미리하는 것입니다 (경우 위의 주소는 공식 미리보기 페이지에서 직접 볼 수있다)

  • 사무실 PDF 미리보기 페이지를 변환합니다

오피스 기반 솔루션 구현

구현 : 서버의 로컬 서버 마이크로 소프트 오피스, COM 인터페이스에 설치 PDF로 Office 파일을 변환하는 C # 코드를 호출하여 (Office 소프트웨어를 사용하여 Word 문서를 열 수 유사 한 다음 저장 PDF 파일로).

(이 패키지는 Nuget 패키지 관리자 패키지로 설치할 수있는 필요 .Net FrameWork프로젝트의 버전을 사용)

Microsoft.Office.Interop.Word
Microsoft.Office.Interop.PowerPoint
Microsoft.Office.Interop.Excel

코드 :

public class OfficeHelper
{
    static Word.Application wordApplication = new Word.Application();
    static Excel.Application excelApplication = new Excel.Application();
    static PowerPoint.Application pptApplication = new PowerPoint.Application();
    
    /// <summary>
    /// 将Word文档转换成PDF格式
    /// </summary>
    /// <param name="sourcePath">源文件路径</param>
    /// <param name="targetPath">目标文件路径</param>
    /// <returns></returns>
    public static bool WordConvertPDF(string sourcePath, string targetPath)
    {
        bool result;
        Word.Document wordDocument = null;
        try
        {
            wordDocument = wordApplication.Documents.Open(ref sourcePath);
            if (wordDocument != null)
            {
                wordDocument.SaveAs2(targetPath, WdExportFormat.wdExportFormatPDF);
                //wordDocument.ExportAsFixedFormat(targetPath, WdExportFormat.wdExportFormatPDF);
                result = true;
            }
        }
        catch (Exception ex)
        {
            result = false;
            LogHelper.Log($"文件:{sourcePath} 生成失败,原因:{ex.Message}", ex.StackTrace);
        }
        finally
        {
            if (wordDocument != null)
            {
                wordDocument.Close();
                wordDocument = null;
            }
        }
        return result;
    }
    
    
    /// <summary>
    /// 将Excel文档转换成PDF格式
    /// </summary>
    /// <param name="sourcePath">源文件路径</param>
    /// <param name="targetPath">目标文件路径</param>
    /// <returns></returns>
    public static bool ExcelConvertPDF(string sourcePath, string targetPath)
    {
        bool result;
        Workbook workBook = null;
        try
        {
            workBook = excelApplication.Workbooks.Open(sourcePath);
            if (workBook != null)
            {
                workBook.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, targetPath);
                result = true;
            }
        }
        catch (Exception ex)
        {
            result = false;
            LogHelper.Log($"文件:{sourcePath} 生成失败,原因:{ex.Message}", ex.StackTrace);
        }
        finally
        {
            if (workBook != null)
            {
                workBook.Close();
                workBook = null;
            }
        }
        return result;
    }

    /// <summary>
    /// 将PPT文档转换成pdf格式
    /// </summary>
    /// <param name="sourcePath">源文件路径</param>
    /// <param name="targetPath">目标文件路径</param> 
    /// <returns></returns>
    public static bool PPTConvertPDF(string sourcePath, string targetPath)
    {
        bool result;
        object missing = Type.Missing;
        Presentation persentation = null;
        try
        {
            persentation = pptApplication.Presentations.Open(sourcePath, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);
            if (persentation != null)
            {
                persentation.SaveAs(targetPath, PpSaveAsFileType.ppSaveAsPDF, Microsoft.Office.Core.MsoTriState.msoTrue);
                //persentation.ExportAsFixedFormat(targetPath, PpFixedFormatType.ppFixedFormatTypePDF);
                result = true;
            }
        }
        catch (Exception ex)
        {
            result = false;
            LogHelper.Log($"文件:{sourcePath} 生成失败,原因:{ex.Message}", ex.StackTrace);
        }
        finally
        {
            if (persentation != null)
            {
                persentation.Close();
                persentation = null;
            }
        }
        return result;
    }
}

사무실 COM API를 제공 SaveAs하고 ExportAsFixedFormat문서를 생성하는 두 가지 방법, 당신이 호출 할 때, 대부분은 (에 기본값을 사용하는 다른 매개 변수에 관심을 지불 할 필요가 인터페이스 문서 주소 ).

위의 코드에서 wordApplication정적 변수 제기로서, 각 시간은 파일이로드되고, 이는 개구를 통해 (프로그램에 대응하는 오픈 Office.Word를했다). 내가 로컬 시험 할 때, 로컬 코드의 마이크로 소프트 오피스 2016 버전이 정상적으로 작동되어 설치됩니다. 내가 다른 사람을 보낼 수있는 프로그램을 사용하면 파일 변환이 실패한 후에는, 단지 문서를 처리하는 최초의 성공적인 변환 Word에서 발견했다.
다른 측면은 컴퓨터 마이크로 소프트 오피스 365 버전에 설치되어 있기 때문에 제 파일 후 시험 후,이 처리 될 수있다 wordApplication개체가 닫혀 파일의 백 올바르게 변환 할 수없는 원인. 다시 인스턴스화 각 변환하기 전에 코드를 수정하여 Word.Application각 인스턴스 리드 비록 비효율적으로 (해당 다시 재개 Office.Word 프로그램), 그러나 모든 파일이 성공적으로 처리됩니다. 가장 놀라운 같은 환경 pptApplication말해 줄 수 파트너의 작은 이해가 연속 통화가 아직 문제의 특정 원인을 알고, 정상입니다.

타사 플러그인을 기반으로 솔루션을 달성하기 위해

여기에 소개 첨탑GemBox 두 개의 플러그인의 문서와 직접 거래, 그들은 서버에 Office 소프트웨어를 설치할 수 없습니다.
PS : 사용에 대한 수수료의 공식 버전은, 그렇지 않으면 문서는 워터 마크가 생성됩니다. 무료 버전은 만들거나 읽기와 같은 일부 제한해야합니다 Office파일, 직접 던져 예외 한도를 초과하면 경우 페이지 제한이 있습니다.

여기에 간단하게 코드를 아래, 자세한 API를 탐험하는 플러그인 문서의 공식 웹 사이트로 이동 할 수 있습니다.

  • .NET 무료 Spire.Doc

public static void WordConvertPDF(string sourcePath, string targetPath)
{
    using (var doc = new Document(sourcePath))
    {
        doc.SaveToFile(targetPath, Spire.Doc.FileFormat.PDF);
    }
}
  • GemBox.Document 무료 버전

public static void WordConvertPDF(string sourcePath, string targetPath)
{
    // If using Professional version, put your serial key below.
    ComponentInfo.SetLicense("FREE-LIMITED-KEY");
    DocumentModel document = DocumentModel.Load(sourcePath);
    document.Save(targetPath, SaveOptions.PdfDefault);
}

WPS 기반 솔루션 구현

이 및 Office 기반 솔루션, 코드 구현이 변환 된 파일을 통해 호출 COM 인터페이스. 물론, 사전에 서버에 설치된 소프트웨어를 WPS.

로컬 WPS 설치 디렉토리에서 프로젝트에 다음 DLL 파일 및 참고 문헌을 찾아

wpsapi.dll
wpsapiex.dll

코드 :

public static void WordConvertPDF(string sourcePath, string targetPath)
{
    var app = new Word.Application();
    var doc = app.Documents.Open(sourcePath,Visible: MsoTriState.msoFalse);
    doc.SaveAs2(targetPath, Word.WdExportFormat.wdExportFormatPDF);
    doc.Close();
    app.Close();
}

어느 Word되고 wpsapi.dll나중에 프로그램, 어셈블리 네임 스페이스 이름에 추가됩니다.
WPS는 나를 그냥 기본적으로 성공적으로 실행 호출 할 문서를 변환하고, 실제적인 응용 프로그램 만 이해하고 그것의 조금을 수행하려고 할 수 있다고 할 수 없다.

개요

PDF 파일로 Office 문서에 성공, 미리 직접 간단한의 웹 페이지에서 PDF 파일 및 미리보기의 PDF 파일을 열 수 있습니다 심지어 기본 브라우저로하고있다. 이 온라인 솔루션은 이미 많은에 의해 최종 선택 pdf.js페이지에서 미리보기. 왕이, 파티를 향하고하는 분위기를 설정하는 데 일부 "현실적인"사진을 필요로하고, 제목이 너무 건조를 지루, 그림 미리보기 이미 파일, 나머지는 커버를 보냈습니다!
그래서 자연스럽게 문서에 적절한 커버 아트를 설정하는 방법이 문제가 있습니까? 즉시 방법을 생각커버로 눈에 자신에게 사진 기쁘게 선택(음, 이것은 넌센스이다). 여러 정말 다음과 같은 솔루션에 대해 생각하고 있습니다 :

  1. 표지 그림 내부 Office 파일을 가져 오기
  2. 커버로 PDF 파일 미리보기의 첫 페이지를 가져옵니다

방법 장례식,하자 듣고는 분해 옆에 (결국, 나는 완성 된 아이 없습니다! ~ ~ ~ ~) 예측.

추천

출처www.cnblogs.com/cplemom/p/12186527.html