プロが教えるわが家の防犯対策術!

web上(aspx)で帳票をPDFにて出力したいのですが、一般的にはどのように作成するのが普通でしょうか。

実現したいことは以下のとおりです。
・IE6、IE7、IE8上で動作
・Wordで作成した文書にプログラムから差込印字を行った結果をPDFとして
 出力したい。

A 回答 (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
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!