テンプレートテスト
ブログの説明
ブログの説明2
menu
keyboard_arrow_up
Top
search
close
home
ホーム
computer
PC一般
construction
開発環境・ツール
code
プログラミング
home
ホーム
computer
PC一般
construction
開発環境・ツール
code
プログラミング
Home
›
Archives for 8月 2020
2020/08/21
image
NO IMAGE
wkhtmltopdf で PDF に変換した際に canvas 内の日本語だけが文字化けする
update
event_note
label
ASP.NET Core
label
wkhtmltopdf
wkhtmltopdf を使って HTML を PDF へ変換した際、日本語が文字化けしたり文字コードがそのまま表示されたりして、かなりはまったのでメモしておきます。
尚、先に言っておきますが、原因は不明です。 ただ、一応対策方法は分かったので、それについて書いています。 ちなみに、以下の記事にも書いたように以前にも wkhtmltopdf と canvas ではまりましたが、今回もめちゃくちゃはまりました。 - [wkhtmltopdf で canvas に何も描画されない](https://kuttsun.blogspot.com/2020/08/wkhtmltopdf-canvas.html) 上記記事に書いたように、前提として wkhtmltopdf は現時点で ES6 に対応していないので注意してください。 ## 環境 実際には ASP.NET Core で Rotativa.AspNetCore を使っており、その中で HTML から PDF への変換に wkhtmltopdf が使われています。 - ASP.NET Core 2.2 - [Rotativa.AspNetCore](https://github.com/webgio/Rotativa.AspNetCore) 1.1.1 - wkhtmltopdf 0.12.4 ## 現象と対策 `fillText` で文字を描画する際、日本語をそのまま指定すると `あ` のように文字コードがそのまま表示されてしまいました。 ちなみに `12354` は `あ` の Unicode です。 - https://0g0.org/unicode/3042/ いろいろ試行錯誤した結果、どうやら文字コードを直接指定してから文字に変換すると上手く描画できることが分かりました。 ```js context.fillText(String.fromCharCode(12354), 0, 0); ``` 意味不明ですが、一応これで上手くいくようなので、以下のようにして描画することにしました。 - 文字列を文字に分割 - 各文字の Unicode を取得 - `String.fromCharCode` で Unicode を指定して文字を取得 - 文字を結合して `fillText` で出力 なんか文字コードへ変換してまたそのまま文字へ戻しているだけのように思いますが、何故かこれで上手くいったのでこうしています。 ### サロゲートペアへの対応 JavaScript では文字は UTF-16 で扱われているようなので、上記のことをどんな文字でも対応できるようにするには、サロゲートペアも考慮しておく必要があります。 サロゲートペア自体についてはググればいくらでも見つかるので割愛します。 私は JavaScript のコードも Razor で出力しており、各文字の Unicode を取得するのは C# 側でやりました。 たまたま私の環境ではサーバー側の処理で事足り、C# を使ったほうが簡単だったからです。 サロゲートペアを考慮して Unicode から文字を取得するのは以下の記事を参考にさせてもらいました。 - http://liosk.blog103.fc2.com/blog-entry-162.html
## 参考 URL - https://ics.media/entry/8385/ - https://qiita.com/sounisi5011/items/aa2d747322aad4850fe7 - https://qiita.com/jkr_2255/items/38d4bfdd9071560eaf8d - https://qiita.com/mpyw/items/15a25c5fef5f4a228b61 - https://barikanblog.com/javascript-es6-babel/#toc-2 - https://qiita.com/YusukeHirao/items/2f0fb8d5bbb981101be0 - http://liosk.blog103.fc2.com/blog-entry-162.html
Read more
2020/08/20
image
NO IMAGE
[C#] 文字の Unicode を取得
update
event_note
label
C#
文字の Unicode を取得する方法です。意外と情報が見つからなかったので。
```cs using System; using System.Text; using System.Globalization; ``` ```cs var unicode = new UnicodeEncoding(true, false); var encodedBytes = unicode.GetBytes("あ"); string output = ""; for (int i = 0; i < encodedBytes.Length; i++) { output += string.Format("{0:x2}", encodedBytes[i]); } Console.WriteLine(output);// 3042 // 数値に変換 var hex = int.Parse(output, NumberStyles.HexNumber); Console.WriteLine(hex.ToString());// 12354 ``` `あ` の Unicode は以下です。 - https://0g0.org/unicode/3042/
## 参考 URL - https://www.ipentec.com/document/csharp-unicode-string-to-unicode-scalar-value-string
Read more
2020/08/19
image
NO IMAGE
wkhtmltopdf で canvas に何も描画されない
update
event_note
label
ASP.NET Core
label
wkhtmltopdf
wkhtmltopdf を使って HTML を PDF へ変換していたのですが、canvas に JavaScript で描画しているはずの内容が全く表示されず、かなりはまったのでメモしておきます。
## 環境 実際には ASP.NET Core で Rotativa.AspNetCore を使っており、その中で HTML から PDF への変換に wkhtmltopdf が使われています。 - ASP.NET Core 2.2 - [Rotativa.AspNetCore](https://github.com/webgio/Rotativa.AspNetCore) 1.1.1 - wkhtmltopdf 0.12.4 ## 原因 結論から先に書くと、現時点で wkhtmltopdf は ES6 に対応していないため、ES6 で追加されたコードを書くと正しく実行されないようです。 具体的には、私の場合、以下のようなコードを書いていたことが原因でした、 - 変数宣言で `let` を使っていた - `codePointAt` で文字コードを取得していた ## 対策 `let` ならば `var` に置き換えるとかで簡単に対応可能ですが、中には対応が難しいものもあるかと思います。 一応対策として、babel を使って ES5 以前のコードにコンパイルするという手があります。 babel のインストール方法や使い方はググればいくらでも見つかるので割愛します。 ただ、私は JavaScript のコードも Razor で出力していたため、事前コンパイルせず(できず)、以下のようにブラウザ(この場合は wkhtmltopdf) 内でコンパイルせざるを得ませんでした。 ```html ``` そして、これだと処理速度が異常に遅くて使い物にならなかったので、結局 ES6 のコードを使わないように書き直して対応しました。 ## 原因が分かるまでの経緯 「wkhtmltopdf canvas」などでググってみると、ChartJS が描画されないといった内容が多くヒットしますが、canvas を使っているのは同じはずなので、まずはそれを参考にいろいろ試してみました。 具体的には以下です。 - `canvas` を `div` で括ってサイズを同じにする - `--no-stop-slow-scripts --javascript-delay 1000` を指定する(時間は適宜変更) これらについては参考 URL やググってみるといろいろヒットするので、割愛します。 しかし、これらのことをやっても状況は変わらず、それ以上の情報はいくらググっても見つかりませんでした。 ただ、`canvas` 内の表示だけがおかしいので、JavaScript に問題があるのではないかということは推測できました。 デバッグが非常にやりづらく、仕方ないので少しずつ JavaScript コードを埋め込んで動作確認していたら、どうも途中から JavaScript のコードが実行されていないような感じでした。 そこでふと `let` を見て、比較的最近追加された仕様だったなぁと思い、`var` に変更したところ上手く描画されるようになりました。 いや、これ本当にはまった。 尚、wkhtmltopdf を現時点で最新の 0.12.6 に変更しても同様でした。 また、上述した - `canvas` を `div` で括ってサイズを同じにする - `--no-stop-slow-scripts --javascript-delay 1000` を指定する(時間は適宜変更) ですが、私の環境では前者が不要でしたが、後者は必要でした。
## 参考 URL - https://github.com/wkhtmltopdf/wkhtmltopdf/issues/3596 - https://qiita.com/hakatakinoco/items/47ea32689096004a5b72 - https://stackoverflow.com/questions/42561036/wkhtmltopdf-does-not-render-chart-js-2-5-0-graph
Read more
新しい投稿
前の投稿
ホーム
Translate
Popular Posts
TortoiseGit でコミットメッセージを変更する
image
NO IMAGE
TortoiseGit でブランチ間の差分を見る
image
NO IMAGE
[ASP.NET Core] 前のページ(遷移元)の URL を取得する
image
NO IMAGE
外部 DLL を NuGet パッケージに含める方法
image
NO IMAGE
[C#] SonarQube で .NET アプリケーションのコード解析を行う
image
NO IMAGE
[ASP.NET Core] Form value count limit 1024 exceeded のエラーが発生した
image
NO IMAGE
マージ元ブランチとマージ先ブランチ
TortoiseGit でリモートリポジトリのタグを削除する
image
NO IMAGE
C# で GitHub からリリースバージョンを取得する
[Jenkins] エラー 1069: ログオンに失敗したため、サービスを開始できませんでした。
Labels
.NET Core
31
.NET Framework
17
.NET Standard
2
AdminLTE
1
Apache
3
AppVeyor
2
AsciiDoc
3
ASP.NET Core
55
Atom
4
AWS
2
AWS Cloud9
4
blockdiag
1
Blogger
10
Bootstrap
3
C/C++
6
C#
106
CentOS
3
Chrome
1
Chronograf
3
Codecov
1
CSS
1
Docker
28
DokuWiki
4
Doxygen
1
draw.io
1
Electron.NET
2
Entity Framework Core
9
Excel
2
FFmpeg
2
Firefox
5
Git
12
GitBook
4
GitBucket
7
GitHub
7
GitLab
30
Go
1
Google
1
Google Cloud Platform
1
Grafana
5
HTML
5
IIS
8
InfluxDB
6
JavaScript
7
Jenkins
7
Linux
25
Log4View
1
MahApps.Metro
3
MaterialDesignInXamlToolkit
1
MVC
1
MVVM
6
NLog
3
Node.js
3
npm
1
OpenSSL
3
ownCloud
2
Pine Script
1
PlantUML
5
PowerShell
7
Prism
2
Python
11
Razor
3
Redmine
30
remark.js
2
rocketchat
4
Ruby
3
SignalR
1
Socket.IO
1
SonarQube
5
Sphinx
10
SQL Server
5
SQLite
1
t
1
TestLink
2
Tomcat
2
TortoiseGit
10
TortoiseSVN
2
Trading View
1
Travis CI
1
Ubuntu
13
Visual Studio
39
Visual Studio Code
9
Vue.js
8
Windows
56
Windows 10
4
Windows ADK
1
Windows API
2
Windows Embedded
4
wkhtmltopdf
2
Word
3
WPF
12
WSL
1
Xamarin
1
xUnit
5
アプリケーション
1
デザインパターン
1
テスト
3
バッチファイル
2
ぴよ
3
プログラミング
3
ライセンス
1
ラベル
3
ラベル1
2
英語
2
雑記
1
書籍
1
数学
1
正規表現
1
Blog Archive
►
2022
(1)
►
2月
(1)
►
2021
(24)
►
5月
(7)
►
4月
(8)
►
3月
(2)
►
2月
(2)
►
1月
(5)
▼
2020
(60)
►
12月
(1)
►
11月
(3)
►
10月
(3)
►
9月
(3)
▼
8月
(3)
wkhtmltopdf で PDF に変換した際に canvas 内の日本語だけが文字化けする
[C#] 文字の Unicode を取得
wkhtmltopdf で canvas に何も描画されない
►
7月
(7)
►
6月
(7)
►
5月
(2)
►
4月
(6)
►
3月
(6)
►
2月
(7)
►
1月
(12)
►
2019
(92)
►
12月
(13)
►
11月
(9)
►
10月
(3)
►
9月
(2)
►
8月
(3)
►
7月
(5)
►
6月
(11)
►
5月
(6)
►
4月
(17)
►
3月
(9)
►
2月
(6)
►
1月
(8)
►
2018
(100)
►
12月
(1)
►
11月
(11)
►
10月
(8)
►
9月
(6)
►
8月
(10)
►
7月
(10)
►
6月
(8)
►
5月
(9)
►
4月
(8)
►
3月
(14)
►
2月
(4)
►
1月
(11)
►
2017
(117)
►
12月
(14)
►
11月
(20)
►
10月
(17)
►
9月
(19)
►
8月
(10)
►
7月
(8)
►
6月
(3)
►
5月
(6)
►
4月
(5)
►
3月
(2)
►
2月
(8)
►
1月
(5)
►
2016
(91)
►
12月
(5)
►
11月
(9)
►
10月
(11)
►
9月
(9)
►
8月
(6)
►
7月
(14)
►
6月
(14)
►
5月
(11)
►
4月
(10)
►
3月
(2)
►
2015
(23)
►
12月
(4)
►
11月
(2)
►
10月
(8)
►
9月
(8)
►
7月
(1)
►
2013
(3)
►
11月
(1)
►
9月
(1)
►
7月
(1)
►
2012
(2)
►
7月
(1)
►
6月
(1)
►
2011
(1)
►
9月
(1)
►
2009
(1)
►
7月
(1)
►
2008
(2)
►
11月
(1)
►
7月
(1)
►
2007
(3)
►
10月
(3)