【Aspose.Cells for .NET】1セルの中で文字を自動改行させる場合にPDF保存すると文字改行位置が異なる

1セルの中で文字を自動改行させます。
PDF保存したものとEXCELプレビューでは文字改行位置が異なります。
EXCELプレビューと同じ改行位置にするにはどうしたら良いでしょうか?

ToPrinterでも同じ現象になります。こちらも対応したいです。

PDF
image.png (34.9 KB)

EXCEL Preview
image.png (41.7 KB)

プログラムソースと出力結果
output.zip (1.2 MB)

Exampleのソースを一部修正したソースとなります。

@HiroA,

出力されたExcelファイルも共有していただけませんか。 さらに、ワークブックで使用されているフォントアーカイブ(.ttfファイル)を添付してください。 これは、私たちがあなたの問題を私たちの側で正確に評価するのに役立ちます。

出力されたEXCELファイルはoutput.zipに含まれています。
フォントはWindows標準のものです。Arialでも同様に発生しました。

@HiroA,

申し訳ありませんが、添付のzipアーカイブには出力PDFファイルとソースコードしか含まれていません。 「output.xlsx」ファイルは含まれていません。 参考までに「output.xlsx」ファイルも添付してください。

EXCELを添付します。

output.zip (6.8 KB)

@HiroA,

サンプルExcelファイルをありがとう。

セルにテキスト/コンテンツを挿入しながら改行(ブレーク)を挿入することで問題に対処できると思います。 最新バージョン/修正で次のサンプルコードを使用してテストしました:Aspose.Cells for .NET v22.6.1、正常に動作し、出力Excelファイルと出力PDFファイルの両方が同一です。
例えば。、
サンプルコード:

            // Instantiate new workbook
            Workbook workbook = new Workbook();

            // Insert a value into the A1 cell in the first worksheet
            workbook.Worksheets[0].Cells[0, 0].PutValue("●●●●●○○○○○12345\n67890●●●●●○○○○○");
            workbook.Worksheets[0].Cells.Columns[0].Width = 22;
            workbook.Worksheets[0].Cells.Rows[0].Height = 100;

            Style _style = workbook.CreateStyle();
            _style.IsTextWrapped = true;
            var _font = _style.Font;
            _font.Name = "MS ゴシック";

            workbook.Worksheets[0].Cells[0, 0].SetStyle(_style);

            // Define PdfSaveOptions
            PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();

            // Set the compliance type
            //pdfSaveOptions.Compliance = PdfCompliance.PdfA1b;

            // Save the file
            workbook.Save("e:\\test2\\out1.pdf", pdfSaveOptions);
            workbook.Save("e:\\test2\\out12.xlsx");

うまくいけば、これは少し役立ちます。

EXCELでは全角文字と半角文字が混在した文字列を処理する場合は、
今回のように意図しない場所で改行することはありますが
全角文字のみでは発生しません。
この部分の動作はEXCELとは互換性が無いということでよろしいでしょうか?

示された例では必ず改行(ブレーク)を入れる処理が必要になり、
_style.IsTextWrapped = true; を使用できないことを意味します。

複数の箇所がありますので改行(ブレーク)位置の文字数をそれぞれプログラミングするのは
効率が悪く、文字列を加工せずに対応できませんか?

@HiroA,

サンプルコードを使用しておっしゃったように、出力PDFで問題に気づきました。 セルにテキスト/コンテンツを挿入するときに改行を挿入して解決策を受け入れなかったため。 そこで、問題の調査チケットを記録することにしました。 問題のIDが「CELLSNET-51411」のチケットを記録しました。 すぐに調べます。

更新があり次第、お知らせします。

ご不便をおかけして申し訳ございません。

@HiroA

使用されているフォント名が正しくありません。 MS ゴシックではなくMS ゴシックにする必要があります(フォント名の空白文字に注意してください。\u0020の代わりに\u3000を使用する必要があります)。

次に、CJKのワードブレークを設定します:pdfSaveOptions.DefaultEditLanguage = DefaultEditLanguage.CJK;

Excelで生成されたものと同じ結果が得られます。

// Instantiate new workbook
Workbook workbook = new Workbook();

// Insert a value into the A1 cell in the first worksheet
workbook.Worksheets[0].Cells[0, 0].PutValue("●●●●●○○○○○1234567890●●●●●○○○○○");
workbook.Worksheets[0].Cells.Columns[0].Width = 20;
workbook.Worksheets[0].Cells.Rows[0].Height = 100;

Style _style = workbook.CreateStyle();
_style.IsTextWrapped = true;
var _font = _style.Font;
_font.Name = "MS ゴシック";

workbook.Worksheets[0].Cells[0, 0].SetStyle(_style);

// Define PdfSaveOptions
PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();

//CJK preferred word break.
pdfSaveOptions.DefaultEditLanguage = DefaultEditLanguage.CJK;

// Set the compliance type
//pdfSaveOptions.Compliance = PdfCompliance.PdfA1b;

// Save the file
workbook.Save("output.pdf", pdfSaveOptions);
workbook.Save("output.xlsx");

ありがとうございました。
ご指摘の方法で解決できました。

pdfSaveOptions.DefaultEditLanguageが追加されているのに気付いておりませんでした。

@HiroA,

問題は、提案されたAPIと更新されたサンプルコードによって分類されていることを知っておくとよいでしょう。 さらにサポートが必要な場合、またはその他の問題や質問がある場合は、いつでもお気軽にお問い合わせください。 すぐにサポートします。

プリンタの直接出力にて問題が出ました。

Workbookrenderの ConstructorsにImageOrPrintOptionsがあります。
DefaultEditLanguageの設定をして、ToPrinterで出力した場合は設定が有効ではありません。
改行位置がおかしいのですが設定は無効でしょうか?

@HiroA

次のコードで「Microsoft Print to PDF」に印刷しました。プリンターからの出力は、Workbook.Save
によって生成された「output.pdf」と同じです

// Instantiate new workbook

Workbook workbook = new Workbook();

// Insert a value into the A1 cell in the first worksheet
workbook.Worksheets[0].Cells[0, 0].PutValue("●●●●●○○○○○1234567890●●●●●○○○○○");
workbook.Worksheets[0].Cells.Columns[0].Width = 20;
workbook.Worksheets[0].Cells.Rows[0].Height = 100;

Style _style = workbook.CreateStyle();
_style.IsTextWrapped = true;
var _font = _style.Font;
_font.Name = "MS ゴシック";

workbook.Worksheets[0].Cells[0, 0].SetStyle(_style);

// Define PdfSaveOptions
PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();

//CJK preferred word break.
pdfSaveOptions.DefaultEditLanguage = DefaultEditLanguage.CJK;

// Set the compliance type
//pdfSaveOptions.Compliance = PdfCompliance.PdfA1b;

// Save the file
workbook.Save("output.pdf", pdfSaveOptions);
workbook.Save("output.xlsx");


ImageOrPrintOptions imgOpt = new ImageOrPrintOptions();
imgOpt.DefaultEditLanguage = DefaultEditLanguage.CJK;

WorkbookRender wr = new WorkbookRender(workbook, imgOpt);
wr.ToPrinter("Microsoft Print to PDF");

以下のサンプルでは プリンターからの出力は、Workbook.Saveによって生成された「output.pdf」と同じではありません。

//

using System.IO;

using Aspose.Cells;
using Aspose.Cells.Rendering;

namespace Aspose.Cells.Examples.CSharp.Files.Utility
{
public class AdvancedConversiontoPdf
{
public static void Run()
{
// ExStart:1
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        // Instantiate new workbook

        Workbook workbook = new Workbook();

        // Insert a value into the A1 cell in the first worksheet
        workbook.Worksheets[0].Cells[0, 0].PutValue("●●●●●○○○○○1234567890●●●●●○○○○○ 様納入");
        workbook.Worksheets[0].Cells.Columns[0].Width = 27;
        workbook.Worksheets[0].Cells.Rows[0].Height = 30.54;

        Style _style = workbook.CreateStyle();
        _style.IsTextWrapped = true;
        var _font = _style.Font;
        _font.Name = "MS 明朝";
        _font.Size = 9;

        workbook.Worksheets[0].Cells[0,0].SetStyle(_style);

        // Define PdfSaveOptions
        PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();

        //CJK preferred word break.
        pdfSaveOptions.DefaultEditLanguage = DefaultEditLanguage.CJK;

        // Set the compliance type
        //pdfSaveOptions.Compliance = PdfCompliance.PdfA1b;

        // Save the file
        workbook.Save(dataDir + "output.pdf", pdfSaveOptions);
        workbook.Save(dataDir + "output.xlsx");
        // ExEnd:1

        ImageOrPrintOptions imgOpt = new ImageOrPrintOptions();
        imgOpt.DefaultEditLanguage = DefaultEditLanguage.CJK;

        WorkbookRender wr = new WorkbookRender(workbook, imgOpt);
        //wr.ToPrinter("Microsoft Print to PDF");
        wr.ToPrinter("Microsoft Print to PDF");

    }
}

}

@HiroA

私はあなたのコードを私の側で試しました.printとworkbook.Saveからの出力は同じです.
Screenshot_diff.png (63.1 KB)

この件について作成したプログラムのミスと判明しました。
クローズで問題ありません。

@HiroA,

ご意見ありがとうございます。

あなたがそれを整理したことを知ってうれしい. スレッドは現在閉鎖されています。