以前、C#でDeepLAPIについて記事を書きましたが、今回はPDFファイルをDocxファイルに変換できるようになったらしいので確認してみました
※2024年5月現在ではPDFファイルをDocxファイルに変換することができ、他の拡張子は順次実装予定らしいです
-
DeepLAPIを使ってみる - ナストンのまとめ
DeepLAPIを使えるように設定する DeepLのアカウントを作成する 今回は、以下のサイトにある「DeepL API ...
続きを読む
拡張子変換についての公式ドキュメント(英語で書かれている「Document format conversions」という箇所が今回の記事の内容となっています)
-
Translate documents | DeepL API Documentation
続きを読む
翻訳時にファイルの拡張子を変更する
やり方としてはファイルをアップロードする際に【output_format】というパラメーター追加するだけで他は以前の記事と変わりません
var uploadRequest = (HttpWebRequest)WebRequest.Create(uploadUrl);
uploadRequest.Method = "POST";
uploadRequest.Headers.Add("Authorization", "DeepL-Auth-Key " + deepAPIAuthCode);
var multipartFormDataContent = new MultipartFormDataContent();
multipartFormDataContent.Add(new StringContent(sourceLang), "target_lang");
// output_formatを追加する(2024年5月現在はPDFファイルからdocxファイルへの変換のみ)
multipartFormDataContent.Add(new StringContent("docx"), "output_format");
multipartFormDataContent.Add(new ByteArrayContent(File.ReadAllBytes(targetFile)), "file", translatFileName);
uploadRequest.ContentType = multipartFormDataContent.Headers.ContentType.ToString();
uploadRequest.ContentLength = multipartFormDataContent.Headers.ContentLength.Value;
using (var stream = uploadRequest.GetRequestStream())
{
multipartFormDataContent.CopyToAsync(stream).Wait();
}
using(var response = uploadRequest.GetResponse())
using (var stream = response.GetResponseStream())
{
var reader = new StreamReader(stream, Encoding.UTF8);
var result = reader.ReadToEnd();
var deepLResponseData = JsonSerializer.Deserialize<DocumentUploadResponseData>(result);
documentId = deepLResponseData.document_id;
documentKey = deepLResponseData.document_key;
}
注意点
翻訳したファイルをダウンロードする際にファイルの拡張子を.pdfファイルから.docxファイルに変換する必要があります
using (var response = downloadRequest.GetResponse())
using (var stream = response.GetResponseStream())
{
// ファイルダウンロード時に拡張子をdocxにする必要がある
translationFile = Path.Combine(translatFilePath, translatFileBaseName + "_JA" + translatFileExt);
using (var fileStream = new FileStream(translationFile, FileMode.Create, FileAccess.Write))
{
stream.CopyTo(fileStream);
}
}