尝试使用Drive API将docx文件转换为其他格式(pdf)

时间:2018-02-02 14:38:14

标签: c# api google-drive-api google-api-dotnet-client

我试图使用驱动器api将.docx文件转换为.pdf,这听起来很合理,因为你可以手动完成。 这是我的代码:

 FilesResource.CreateMediaUpload request;
        using (var stream = new System.IO.FileStream(@"test.docx",
            System.IO.FileMode.Open))
        {
            request = driveService.Files.Create(
                fileMetadata, stream, "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
            request.Fields = ""id, webViewLink, webContentLink, size";
            var x = request.Upload();
            Console.WriteLine(x);
        }
        var file = request.ResponseBody;

之后,我正在获取此文件的ID并尝试执行:

  var downloadRequest = driveService.Files.Export(file.Id, "application/pdf");

失败并显示错误:“导出仅支持Google文档” OFC!我认为它还没有成为“Google DOC”,但是,如herehere所述,此格式支持转换。

好的,我注意到你是否去了驱动器并手动打开文件它将成为谷歌doc文件,并将获得新的ID。此ID的导出将正常工作。但是,手动执行操作并不是我们需要的可接受方法。 试过另一种方法,你可以使用直接链接& export = pdf参数来转换谷歌doc文件。

  

https://docs.google.com/document/d/FILE_ID/export?format=doc

但是将FILEID传递给该链接在这种情况下不起作用(使用“DOC”文件就好了)尝试做与stackoverflow answer类似的操作。没办法。

因此。有没有办法触发File成为Google DOC并等到它转换?还有其他方法吗? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

感谢@ bash.d我能够从docx转换为pdf。

实际上必须使用API​​的v2及其“插入”方法。

https://developers.google.com/drive/v2/reference/files/insert#examples

使用此链接中的代码并指定

class CustomTableController: UITableViewController {

    fileprivate var data: [Model] = []

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 44

        // registering a cell class for reuse is important
        // but it's enough to make it once in viewDidLoad
        tableView.register(CustomCell.self, forCellReuseIdentifier: CustomCell.identifier)

        tableView.reloadData()
    }

    // MARK: Table view data source
    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // here you can dequeue your cell
        let cell = tableView.dequeueReusableCell(withIdentifier: CustomCell.identifier, for: indexPath) as! CustomCell
        // configure the cell using model, e.g.:
        cell.configure(withTitle: data[indexPath.row].title)
        return cell
    }
}

之后我用

request.Convert = true;

和瞧!有效!在我的情况下转换文件需要大约30秒。