喫茶XRAYトップページ

[スレッド全体
]

[9369] Re4:Synopse PDF engine返信 削除
2015/11/5 (木) 12:39:44 Mr.XRAY
> 先程ふと思い立ち、'MS 明朝' を試しますと、盛大に崩れました(笑)
> 'MS ゴシック' も同様です。


ギョェ!! 気が付きませんでした.
う〜む.

下図の PDF を作成したコードです.
動作確認は,Windows 7 U64(SP1) + Delphi XE(UP1) Pro で,
表示は Acrobat Reader X です.

uses
  SynPdf;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  LvPDF  : TPdfDocument;
  LvPage : TPdfPage;
begin
  LvPDF := TPdfDocument.Create(False);
  try
    LvPDF.Info.Author       := 'Mr.XRAY';
    LvPDF.Info.CreationDate := Now;
    LvPDF.DefaultPaperSize  := psA4;
    LvPage := LvPDF.AddPage;

    LvPDF.Canvas.BeginText;
      LvPDF.Canvas.SetFont('MS P明朝', 80, []);
      LvPDF.Canvas.MoveTextPoint(30, 700);
      LvPDF.Canvas.ShowText('あいうえお', True);
    LvPDF.Canvas.EndText;

    LvPDF.Canvas.BeginText;
      LvPDF.Canvas.SetFont('MS 明朝', 80, []);
      LvPDF.Canvas.MoveTextPoint(30, 500);
      LvPDF.Canvas.ShowText('かきくけこ', True);
    LvPDF.Canvas.EndText;

    LvPDF.SaveToFile('ABC.pdf');
  finally
    FreeAndNil(LvPDF);
  end;
end;

[注意]
上のコードの場合,左下が,座標 (0, 0) となります.
上のコードは Delphi 2009以降 (ユニコード版) 専用です.




[9370] Re5:Synopse PDF engine返信 削除
2015/11/5 (木) 12:49:01 Mr.XRAY
> ギョェ!! 気が付きませんでした.
> う〜む.


てなわけで,フォントの TCharSet に SHIFTJIS_CHARSET を指定してみました.
最後の引数は False でも OK です.

    LvPDF.Canvas.BeginText;
      LvPDF.Canvas.SetFont('MS 明朝', 80, [], -1, SHIFTJIS_CHARSET, True);
      LvPDF.Canvas.MoveTextPoint(30, 500);
      LvPDF.Canvas.ShowText('かきくけこ', True);
    LvPDF.Canvas.EndText;



[9371] Re6:Synopse PDF engine返信 削除
2015/11/5 (木) 14:39:38 Mr.XRAY
> てなわけで,フォントの TCharSet に SHIFTJIS_CHARSET を指定してみました.
> 最後の引数は False でも OK です.


おっ!! いけるかも.と思ったら,MS ゴシック にしたら...
とほほ...


[9372] Re7:Synopse PDF engine返信 削除
2015/11/5 (木) 15:11:56 Mr.XRAY
> おっ!! いけるかも.と思ったら,MS ゴシック にしたら...
> とほほ...


半角の英数字だけだったら,以下でいけるようなんですが...
日本語,漢字等の全角文字があると...  うううっ
止めた !! これでおしまい !!

procedure TForm1.Button1Click(Sender: TObject);
var
  LvPDF  : TPdfDocument;
  LvPage : TPdfPage;
begin
  LvPDF := TPdfDocument.Create(False);
  try
    LvPDF.Info.Author       := 'テスト';
    LvPDF.Info.CreationDate := Now;
    LvPDF.DefaultPaperSize  := psA4;
    LvPDF.DefaultPageLandscape := True;
    LvPage := LvPDF.AddPage;

    LvPDF.Canvas.BeginText;
      LvPDF.Canvas.SetFont('MS Pゴシック', 80, []);
      LvPDF.Canvas.MoveTextPoint(30, 400);
      LvPDF.Canvas.ShowText('Delphi ABC', True);
    LvPDF.Canvas.EndText;

    LvPDF.Canvas.BeginText;
      LvPDF.Canvas.SetFont('MS ゴシック', 80, []);
      LvPDF.Canvas.MoveTextPoint(30, 200);
      LvPDF.Canvas.ShowText('Delphi ABC', True);
    LvPDF.Canvas.EndText;

    LvPDF.SaveToFile('ABC.pdf');
  finally
    FreeAndNil(LvPDF);
  end;
end;




[9373] Re7:Synopse PDF engine返信 削除
2015/11/5 (木) 18:42:47 Harry
▼ Mr.XRAYさん
> てなわけで,フォントの TCharSet に SHIFTJIS_CHARSET を指定してみました.

マスター、、、第5引数は文字セットじゃなく、AForceTTF なんです。

function SetFont(const AName: RawUTF8; ASize: Single;
  AStyle: TFontStyles; ACharSet: integer=-1; AForceTTF: integer=-1;
  AIsFixedWidth: boolean=false): TPdfFont; overload;

AForceTTFはこのようにコメントされています。
// an existing true type font has been specified
推測ですが、これは文字列でフォント名を指定するリスクを避けるための
オプションなんじゃないでしょうか。


とりあえず、等幅フォント問題の原因の端緒はつかめました。
文字のデフォルト幅が正しく取得できていないようです。

これは厳しいです。アドバンス幅についてはパッチの影響を受ける範囲が
今まで問題が発生してたケースだけなので気楽だったんですが…。
ピンポイントで根本原因を特定できなければアウトっぽいです。

今度は「デフォルト幅」についてお勉強です。。。。

[9374] Re8:Synopse PDF engine返信 削除
2015/11/5 (木) 19:21:55 Mr.XRAY
▼ Harryさん

> マスター、、、第5引数は文字セットじゃなく、AForceTTF なんです。

アハハハツ と笑って誤魔化す.
ですね.

> AForceTTFはこのようにコメントされています。
> // an existing true type font has been specified
> 推測ですが、これは文字列でフォント名を指定するリスクを避けるための
> オプションなんじゃないでしょうか。


なるほど.
でも,やってみないと分からんです.ハイ.


[9376] 入力支援の引数が1つずれる?返信 削除
2015/11/5 (木) 19:49:28 Mr.XRAY
> > マスター、、、第5引数は文字セットじゃなく、AForceTTF なんです。
>
> アハハハツ と笑って誤魔化す.
> ですね.


これなんですけど,言い訳なんですが,入力支援の強調文字(太字) ずれる
んですよね.
で,間違えちゃいました.他もそうなのかな ?
えっ ? 自分で確認すれば分かるだろう !! ハイ.



[9375] Re8:Synopse PDF engine返信 削除
2015/11/5 (木) 19:34:05 Mr.XRAY
▼ Harryさん

> ピンポイントで根本原因を特定できなければアウトっぽいです。

あれですね.
漢字圏の人が開発すれば,それはそれなりにチェックするんでしょうけど,
難しいところです.

先日 UP した
[06_ロケールの日付の書式を和暦に変更]
http://mrxray.on.coocan.jp/Delphi/plSamples/164_DatePickerComponent.htm#06

は,一年ほど前の某掲示板での話題なんですが,思い立って,やはり記事に
しておこうかなと,なんですが,
元号なんか,日本だけですからね.


[9377] Re9:Synopse PDF engine返信 削除
2015/11/7 (土) 23:31:17 Harry
▼ Mr.XRAYさん
> これなんですけど,言い訳なんですが,入力支援の強調文字(太字) ずれる
> んですよね.


DelphiのIDEがお茶目なのは今に始まったことではないはず…。


私は質問者さんからスルーされ、当の質問者さんは名を変えて次の質問…。
マスターが言ってた↓通り、なのかもしれませんね。

> 推測ですが,今回の質問は,多分,PDF を作成するプログラムのテストを
> してみたかっただけ,なのではないかと...



…などといったことにめげず、等幅フォント問題を修正するパッチが
出来ました! これで 'MS ゴシック' も 'MS 明朝' も 重なりません!

Synopse PDF engine の不具合修正方法の情報(某掲示板向けの草稿です)
http://osdn.jp/users/harry/pastebin/2304

気が向いたらお試しください。



[9378] Re10:Synopse PDF engine返信 削除
2015/11/8 (日) 07:51:40 Mr.XRAY
▼ Harryさん

> DelphiのIDEがお茶目なのは今に始まったことではないはず…。

仰せの通りでございます.ハイ (ショボン...)
 
> 私は質問者さんからスルーされ、当の質問者さんは名を変えて次の質問…。
> マスターが言ってた↓通り、なのかもしれませんね。


レスしている人をかなり無視していますね.
というか,そうい人が多いんですよね.
やる気があるのか,ないのか.
「解決しました」だけで終わる人なんか,「えっ? どうやったの?」とか.

でも,PDF 作成のことを考えるいい機会を与えてくれたことは確かです.

> Synopse PDF engine の不具合修正方法の情報(某掲示板向けの草稿です)
> http://osdn.jp/users/harry/pastebin/2304


やりっ〜 !! ひぇ〜,あわ〜,米〜... (^^;
早速,PDF の記事にリンクを追加させて頂きましたです.

>これは、{$ifdef UNICODE} の間違いではないかと…。

まっ,こういうことはよく,たまにあるもんです.
私の誤字脱字ようなもんでしょう.ハハハッ.

東アジアの圏内で共通して利用するには,MECSUtils を使用して書き換える
必要がありそうですね.

[MECSUtils リファレンス]
http://ht-deko.com/tech021.html


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82