🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

2回答

3233閲覧

ExcelファイルからPDF出力で外字を出力したい

yokotaka

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2020/12/01 05:54

C#のスクラッチアプリケーションで、エクセルファイルの帳票をPDFに変換するという機能を実装しています。
行っているのは、microsoft.office.interop.excelを使用してエクセル帳票ファイルをオープンし、
それをExportAsFixedFormatでPDFとして出力する、というものです。
この機能で、通常では問題ないのですが、外字を使って入力されている帳票のPDF変換で
変換結果が外字の部分が文字化けする、という問題が発生しました。

読み込んでいるエクセル帳票ファイルをエクセル自体で開き、外字が正しく表示されていることを
確認し、そのままPDFとしてエクスポートする、あるいはPDFとして保存する、という手順を踏んだ
場合はPDFファイルに正しく表示されます。

同じ環境で上記のスクラッチアプリケーションをどうさせると、変換結果のPDFファイル上で
該当の外字の文字が文字化けてしまいます。

外字の設定回りでレジストリやC:\Windows\fontsフォルダ内のファイルにアクセスできるか、などの
調査をしましたが、エクセル自体で表示、出力できているので問題ないのでは、と判断しています。

このような問題を解決された方はおられませんでしょうか?
あるいは、何か対策するヒントなどございませんでしょうか。

開発環境は
Visual Studio 2017
.net framework 4.7
Office 2016
になります。

以下に、コードの抜粋を添付します。
Openメソッドでエクセルファイルを開き、SaveAsPDFでPDFとして出力する、というもので、
今回実現したい機能ではほぼこれらのコード部分しか利用していません。

C#

1 public class ExcelManager : IDisposable 2 { 3 private Application app = null; 4 private Workbook book = null; 5 private bool isDisposed = false; 6 7 /// <summary> 8 /// Excelワークブックを開く 9 /// </summary> 10 public void Open(string path) 11 { 12 // Excelアプリケーション生成 13 app = new Application() 14 { 15 // 非表示 16 Visible = false, 17 }; 18 19 app.DisplayAlerts = false; 20 21 // Bookを開く 22 book = app.Workbooks.Open(@path); 23 } 24 25 /// <summary> 26 /// Excelワークブックをファイル名を指定してPDF形式で保存する 27 /// </summary> 28 /// <returns>true:正常終了、false:保存失敗</returns> 29 public bool SaveAsPDF(string pdfPath) 30 { 31 try 32 { 33 // 全シートを選択する 34 book.Worksheets.Select(); 35 36 // ファイル名を指定してPDF形式で保存する 37 // ExportAsFixedFormatメソッド: ブックを PDF または XPS 形式に発行する 38 // Type : タイプ : XlFixedFormatType xlTypePDF=PDF, xlTypeXPS=XPS 39 // Filename: 出力ファイル名 40 // Quality : 出力品質: XlFixedFormatQuality xlQualityStandard=標準品質, xlqualityminimum=最小限の品質 41 book.ExportAsFixedFormat( 42 Type: XlFixedFormatType.xlTypePDF, 43 Filename: @pdfPath, 44 Quality: XlFixedFormatQuality.xlQualityStandard); 45 } 46 catch 47 { 48 return false; 49 } 50 51 return true; 52 } 53 }

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yokotaka

2020/12/02 08:23

ご指摘ありがとうございました、パラメータを与えたところ、外字が出力できました! プロパティ、とあったので、フォント周りには関係ないと思いこんでおり、検証の対象外にしておりました。 本当にありがとうございました。
退会済みユーザー

退会済みユーザー

2020/12/02 08:30

もし解決したのであれば、解決方法を自己回答してベストアンサーを付けて終了させてください。
guest

回答2

0

Spire.XLS for .NETを試してみてもいいです
次はc#コード

using Spire.Xls; namespace ConvertExcelToPDF { class Program { static void Main(string[] args) { //Workbookインスタンスを作成する Workbook workbook = new Workbook(); //サンプルExcel文書をロードする workbook.LoadFromFile("C: \\Users\\Administrator\\Desktop\\Sample.xlsx"); //変換時にページに合うようにワークシートを設定する workbook.ConverterSetting.SheetFitToPage = true; //PDFに保存する workbook.SaveToFile("ExcelToPdf.pdf", FileFormat.PDF); } } }

投稿2022/10/14 03:59

Gia2apo

総合スコア62

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

radianさんのご指摘で解決しましたので以下に修正したコードを記述します。

C#

1 public class ExcelManager : IDisposable 2 { 3 private Application app = null; 4 private Workbook book = null; 5 private bool isDisposed = false; 6 7 /// <summary> 8 /// Excelワークブックを開く 9 /// </summary> 10 public void Open(string path) 11 { 12 // Excelアプリケーション生成 13 app = new Application() 14 { 15 // 非表示 16 Visible = false, 17 }; 18 19 app.DisplayAlerts = false; 20 21 // Bookを開く 22 book = app.Workbooks.Open(@path); 23 } 24 25 /// <summary> 26 /// Excelワークブックをファイル名を指定してPDF形式で保存する 27 /// </summary> 28 /// <returns>true:正常終了、false:保存失敗</returns> 29 public bool SaveAsPDF(string pdfPath) 30 { 31 try 32 { 33 // 全シートを選択する 34 book.Worksheets.Select(); 35 36 // ファイル名を指定してPDF形式で保存する 37 // ExportAsFixedFormatメソッド: ブックを PDF または XPS 形式に発行する 38 // Type : タイプ : XlFixedFormatType xlTypePDF=PDF, xlTypeXPS=XPS 39 // Filename: 出力ファイル名 40 // Quality : 出力品質: XlFixedFormatQuality xlQualityStandard=標準品質, xlqualityminimum=最小限の品質 41 book.ExportAsFixedFormat( 42 Type: XlFixedFormatType.xlTypePDF, 43 Filename: @pdfPath, 44 Quality: XlFixedFormatQuality.xlQualityStandard, 45 IncludeDocProperties: true); 46 } 47 catch 48 { 49 return false; 50 } 51 52 return true; 53 } 54 }

IncludeDocPropertiesをtrueにすることで出力されました。

ありがとうございました。

投稿2020/12/02 08:46

編集2020/12/02 08:56
yokotaka

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問