- ベストアンサー
ASP.NETでPDF作成のための使用ツールは?
web上(aspx)で帳票をPDFにて出力したいのですが、一般的にはどのように作成するのが普通でしょうか。 実現したいことは以下のとおりです。 ・IE6、IE7、IE8上で動作 ・Wordで作成した文書にプログラムから差込印字を行った結果をPDFとして 出力したい。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Office2007以降がサーバにインストールされている場合、Office標準でPDF出力機能があるはず。 それ以前のOfficeしかサーバに存在しない場合、PDF化は別の方法を考えなければなりません。 そういった場合、「Word文書のPDF化」を調査し、過去の質問にも履歴がなかったら、別途質問スレを立ててください。 ・差し込み印刷 ・PDF化 ・ダウンロード 三つの機能を一つのスレで投げかけると、一つの機能しか答えられない人は回答するのを躊躇してしまいがちです。それによって質問者さんは「回答を中々得られない」という状況になってしまいます。 ですので、、、質問は、、、 ・質問スレは機能毎に立てる。 ・ただしその機能を利用して、何をやろうとしているかの全体像の説明もあると、予備知識を得ることもあります。 ・開発環境やツール等のバージョンを記す。 というように行うと、いち早く解決策を見つけやすくなります。 前置きが長くなりましたが、、、、 以下はOffice2010インストール済/VB2005でのサンプルです。 ・「ワードの差し込み印刷方法」の質問であれば、別に質問してください。 ・サンプルは「PDF化」「ダウンロード」という2点にだけ対応してます。 ・サンプルはWordライブラリの参照設定を必須とした方法を利用しています。 ※構成 プロジェクト(COM:Microsoft Word xx(13or14になるのかな?) Object Liblaryを参照設定) ├page1.aspx │└Button1 └page2.aspx ※page1.aspx.vb Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 'page2起動 Response.Redirect("page2.aspx") End Sub ※page2.aspx.vb --名前空間引込み-- Imports System.IO Imports System.IO.Path Imports Microsoft.Office.Interop Imports System.Runtime.InteropServices.Marshal Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load Dim l_strDocName As String = "C:\文書.doc" 'PDF化 Dim strTemp As String = OutputPdf(l_strDocName) 'バイト配列変換 Dim bytBuff() As Byte = ConvertBuff(strTemp) '変換後のファイル削除 File.Delete(strTemp) 'ダウンロードファイル名 Dim strDlName As String = Path.ChangeExtension(Path.GetFileName(l_strDocName), "pdf") 'ダウンロード Response.Clear() Response.Buffer = True Response.ContentType = "application/pdf" Response.AppendHeader("Content-Disposition", "attachment;filename=" & Server.UrlEncode(strDlName)) Response.OutputStream.Write(bytBuff, 0, bytBuff.Length) Response.Flush() Response.End() End Sub 'PDF化 Private Function OutputPdf(ByVal p_strPathDoc As String) As String Dim l_wodApp As New Word.Application Dim l_wodDocs As Word.Documents = l_wodApp.Documents Dim l_wodDoc As Word.Document = l_wodDocs.Open(p_strPathDoc) 'TODO:差し込み処理をするのであればここで Dim l_strPathTmp As String = IO.Path.GetTempFileName() Call l_wodDoc.ExportAsFixedFormat(l_strPathTmp, Word.WdExportFormat.wdExportFormatPDF, IncludeDocProps:=True) Call l_wodDoc.Close() Call l_wodApp.Quit() Call ReleaseComObject(l_wodDoc) Call ReleaseComObject(l_wodDocs) Call ReleaseComObject(l_wodApp) Return l_strPathTmp End Function 'バイト配列変換 Private Function ConvertBuff(ByVal p_strPath As String) As Byte() Dim bytRet() As Byte Using fs As New FileStream(p_strPath, FileMode.Open, FileAccess.Read) bytRet = New Byte(fs.Length - 1) {} fs.Read(bytRet, 0, bytRet.Length) End Using Return bytRet End Function