-1

MigraDoc を使用して PDF ファイルを生成する小さな HTML-to-PDF があります。書式設定されたテキストを段落に追加する際にバグがあるようです。問題は、複数ページの PDF の最初のページにあるすべてのテキストの下線の書式設定が失われることです。太字と斜体の書式設定はすべてのページで保持されますが、下線は 2 ページ目からのみ表示されます。それは既知の Migradoc バグですか?

これ以上の質問を避けるために、ここに私のコードがあります:

var textFormat = this.BuildTextFormat(isBold, isItalic, isUnderline);
var formattedText = paragraph.AddFormattedText(textFormat);
formattedText.Add(new Text(text));


private TextFormat BuildTextFormat(bool isBold, bool isItalic, bool isUnderline)
{
    var textFormat = TextFormat.NoUnderline;

    if (isUnderline)
    {
        textFormat = TextFormat.Underline;
    }

    if (isBold)
    {
        textFormat |= TextFormat.Bold;
    }

    if (isItalic)
    {
        textFormat |= TextFormat.Italic;
    }

    return textFormat;
}

アップデート:

PdfSharp 開発者に知らせるために、私は問題を解決しましたが、それが実装またはライブラリのバグであるか、あるいはその両方であるかをまだ理解できません。この問題は、スタイルの定義、より正確にはフォントの色を変更することで解決されました。

通常のスタイルには、次のようなコードを追加しました。

    var style = document.Styles["Normal"];
    style.Font.Color = Color.Parse("0x222222");

次に、通常のスタイルから継承された他のスタイルも、16 進コードから解析された異なる色のフォントを持つことができます。

最終的な修正はごくわずかで、解析された各色を次のように変更するだけです。

style.Font.Color = Color.Parse("0xFF222222");

バグを解決する別の方法は、CMYK カラーを作成することでした。別の問題として、それを行っているときに、上記の行で解析された色と CMYK で生成された色がわずかに異なることにも気付きました。そのため、カラー パーサーもバグのようです。ここでは、HEX カラー 0x222222 が CMYK(0,0,0,86.7) と同じであると仮定します。

問題は、説明されている修正によって下線の問題のバグが解決された理由と、バグがページ ブレーキの前にのみ表示された理由です。また、興味深いことに、この問題をデバッグするときに、最初に一部の PDF コンテンツを削除し始めました。PDF ドキュメントから特定のテーブルを削除するとバグが消えるというシナリオもありましたが、これは意味がありません。

いずれにせよ、mdddl ファイルの作成方法を教えていただきありがとうございます。色々試せるので助かりました。

4

1 に答える 1

0

MigraDoc で問題を再現できません。

MigraDoc Hello World サンプルに追加したコードは次のとおりです。

paragraph2 = section.AddParagraph();
var textFormat0 = BuildTextFormat(false, false, false);
var textFormat1 = BuildTextFormat(false, false, true);
var textFormat2 = BuildTextFormat(false, true, false);
var textFormat3 = BuildTextFormat(false, true, true);
var textFormat4 = BuildTextFormat(true, false, false);
var textFormat5 = BuildTextFormat(true, false, true);
var textFormat6 = BuildTextFormat(true, true, false);
var textFormat7 = BuildTextFormat(true, true, true);
var formattedText = paragraph2.AddFormattedText(textFormat0);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat1);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat2);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat3);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat4);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat5);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat6);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat7);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat0);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat1);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat2);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat3);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat4);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat5);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat6);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat7);
formattedText.Add(new Text("Hello, World! "));
paragraph2 = section.AddParagraph();
formattedText = paragraph2.AddFormattedText(textFormat0);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat1);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat2);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat3);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat4);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat5);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat6);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat7);
formattedText.Add(new Text("Hello, World! "));
section.AddPageBreak();
paragraph2 = section.AddParagraph();
formattedText = paragraph2.AddFormattedText(textFormat0);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat1);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat2);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat3);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat4);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat5);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat6);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat7);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat0);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat1);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat2);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat3);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat4);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat5);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat6);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat7);
formattedText.Add(new Text("Hello, World! "));
paragraph2 = section.AddParagraph();
formattedText = paragraph2.AddFormattedText(textFormat0);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat1);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat2);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat3);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat4);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat5);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat6);
formattedText.Add(new Text("Hello, World! "));
formattedText = paragraph2.AddFormattedText(textFormat7);
formattedText.Add(new Text("Hello, World! "));

これにより、2 ページの PDF ファイルが作成され、両方のページに下線付きのテキストが正しく表示されます。

一般的な問題ではありません。SSCCE を待つべきでした。

于 2014-02-27T09:41:08.037 に答える